SORU
7 Ocak 2014, Salı


Nasıl tableHeaderView yüksekliği (UİTableView) ayarlayın otomatik düzen ile?

Son 3 veya 4 saat için kafamı duvarlara smashing oldum, ben bunun üstesinden gelemiyorum. Ben bir UİViewController ile tam ekran UİTableView içinde (orada başka şeyler ekranda, bu yüzden kullanamıyorum bir UİTableViewController) ve almak istiyorum benim tableHeaderView için yeniden boyutlandırma ile otomatik düzen. Söylemeye gerek yok, işbirliği yok.

Aşağıdaki ekran görüntüsü bakın.

enter image description here

OverviewLabel (örneğin "bilgi burada" metin) dinamik içeriğe sahip, otomatik yeniden boyutlandırmak için kullanıyorum ve superview. genel Liste çünkü Her şey güzel, hiearchy içinde Paralax Tablo Görünümü altında doğru olan tableHeaderView hariç boyutlandırma var.

Bu başlık görünümü yeniden boyutlandırmak için bulduğum tek yolu programlama yoluyla, aşağıdaki kodu:

CGRect headerFrame = self.headerView.frame;
headerFrame.size.height = headerFrameHeight;
self.headerView.frame = headerFrame;
[self.listTableView setTableHeaderView:self.headerView];

Bu durumda, headerFrameHeight şöyle tableViewHeader yüksekliği elle hesaplama(innerHeaderView beyaz alan ya da ikinci "Görünüm", headerView tableHeaderView):

CGFloat startingY = self.innerHeaderView.frame.origin.y   self.overviewLabel.frame.origin.y;
CGRect overviewSize = [self.overviewLabel.text
                       boundingRectWithSize:CGSizeMake(290.f, CGFLOAT_MAX)
                       options:NSStringDrawingUsesLineFragmentOrigin
                       attributes:@{NSFontAttributeName: self.overviewLabel.font}
                       context:nil];
CGFloat overviewHeight = overviewSize.size.height;
CGFloat overviewPadding = ([self.overviewLabel.text length] > 0) ? 10 : 0; // If there's no overviewText, eliminate the padding in the overall height.
CGFloat headerFrameHeight = ceilf(startingY   overviewHeight   overviewPadding   21.f   10.f);

Manuel hesaplama çalışır, ama her şey gelecekte değiştirmek için hantal ve hata eğilimli. Yapmak istediğim şey tableHeaderView otomatik yeniden boyutlandırma gibi sağlanan kısıtlamaları dayalı, başka hiçbir yerde yok. Ama beni hayat için, bunu çözemiyorum.

Bu konuda ÇOK çeşitli yazılar var, ama hiçbiri açık ve bana daha fazla kafa karıştırıcı sona erdi. İşte birkaçı:

Gerçekten bu benim için hataları neden oluyor ve mantıklı değil kavramsal olarak her halükarda anlamda HAYIR translatesAutoresizingMaskİntoConstraints özelliğini değiştirmek için yapmak imkansız.

Herhangi bir yardım çok mutluluk duyacağız!

EDİT 1: TomSwift önerisi için teşekkürler, bunu anlamaya başardı. El ile bakış yüksekliğini hesaplamak yerine, takip ve re-set tableHeaderView olarak benim için daha önce hesaplanmış olabilir.

[self.headerView setNeedsLayout];
[self.headerView layoutIfNeeded];
CGFloat height = [self.innerHeaderView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height   self.innerHeaderView.frame.origin.y; // adding the origin because innerHeaderView starts partway down headerView.

CGRect headerFrame = self.headerView.frame;
headerFrame.size.height = height;
self.headerView.frame = headerFrame;
[self.listTableView setTableHeaderView:self.headerView];

CEVAP
8 Ocak 2014, ÇARŞAMBA


Başlığı görüntüle en az sınırlayıcı boyutu elde etmek için UIView systemLayoutSizeFittingSize: yöntemi kullanmak gerekir.

S/A: bu API kullanarak daha fazla tartışma sağlıyorum

How to resize superview to fit all subviews with autolayout?

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ShayLoss

    ShayLoss

    5 Kasım 2009
  • TheJoeycool2010

    TheJoeycool2

    12 Temmuz 2010
  • USI Events

    USI Events

    6 AĞUSTOS 2013