Istnieje wiele wątków o prawidłowo doborze tableHeaderView z auto-układ (one such thread), ale mają tendencję do pre-date iOS 8.-systemLayoutSizeFittingSize: powrót nieprawidłową wysokość dla tableHeaderView pod iOS 8
Mam sytuacji, z licznymi widoki tabelaryczne, wszystkie z nagłówkami, o takim rozmiarze poprawnie pod iOS 7, ale niepoprawnie pod iOS 8 za pomocą kodu, który zawiera większość wspomnianych wcześniej wątków. W sterownikach dla tabel, mam następujące metody:
- (void)rejiggerTableHeaderView
{
self.tableView.tableHeaderView = nil;
UIView *header = self.headerView;
[header setNeedsLayout];
[header layoutIfNeeded];
CGFloat height = [header systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;
CGRect headerFrame = header.frame;
headerFrame.size.height = height;
header.frame = headerFrame;
self.tableView.tableHeaderView = header;
}
z etykietą multi-line pod iOS 7, to poprawnie rozmiarów nagłówek widoku tabeli jest tak:
But ten sam kod uruchomić pod iOS 8 produkuje następujące:
Co trick do -sys coraz temLayoutSizeFittingSize: aby zwrócić prawidłowy rozmiar w systemie iOS 8? Here's a sample project, który demonstruje problem.
Tak, to naprawia. Dziękuję Ci bardzo. Na ile warto, system iOS 8.1 naprawiał wszystko, aby działało tak jak w wersji 7.1 (powyższy zrzut ekranu pochodzi z wersji 8.0.2). Ale po wykonaniu dodatkowego szturchania w moim przykładowym projekcie zdałem sobie sprawę, że oba powyższe zrzuty ekranu są i tak nieprawidłowe. Wysokość widoku została ustawiona, aby odpowiednio zamknąć ciąg, jeśli został obrócony do trybu poziomego, więc poprawka wyraźnie określająca, jaka jest prawdziwa szerokość widoku. –
To nie działa dla mnie. Mam dwie etykiety wewnątrz nagłówka, jedna z nich nie jest poprawnie zmieniana. Pokazano tylko trzy linie. –
Stwierdziłem, że winowajcą było brakujące ograniczenie: konieczne jest posiadanie podpórki z "UILabel" we wszystkich czterech kierunkach przeciwko superview. Pojedyncze brakujące ograniczenie uniemożliwi działanie "systemLayoutSizeFittingSize: UILayoutFittingCompressedSize". – SwiftArchitect