Nowość w iOS 8, możesz uzyskać w 100% dynamiczne komórki widoku tabeli, po prostu ustawiając szacowaną wysokość wiersza, a następnie rozmieszczając elementy w komórce za pomocą automatycznego układu. Jeśli zawartość wzrośnie, wysokość komórki również wzrośnie. Jest to niezwykle przydatne i zastanawiam się, czy to samo można osiągnąć dla nagłówków sekcji w widoku tabeli?
Czy można na przykład utworzyć widok UIView
in tableView:viewForHeaderInSection:
, dodać UILabel
widok podrzędny, określić ograniczenia automatycznego układu etykiety względem widoku i zwiększyć wysokość widoku, aby dopasować go do zawartości etykiety, bez konieczności implementacji tableView:heightForHeaderInSection:
?
Dokumentacja dotycząca viewForHeaderInSection
stanów: „Ta metoda działa poprawnie tylko wtedy, gdy zaimplementowano również tableView: heightForHeaderInSection:”. Nie słyszałem, czy coś się zmieniło na iOS 8.
Jeśli nie można tego zrobić, jaki jest najlepszy sposób naśladowania tego zachowania?
źródło
UITableViewAutomaticDimension
„jeśli zwrócisz tę stałą wtableView:heightForHeaderInSection:
lubtableView:heightForFooterInSection:
,UITableView
użyje wysokości pasującej do wartości zwróconej ztableView:titleForHeaderInSection:
lubtableView:titleForFooterInSection:
(jeśli tytuł nie jestnil
)”.estimatedSectionHeaderHeight
lubtableView:estimatedHeightForHeaderInSection:
ANDsectionHeaderHeight
lubtableView:heightForHeaderInSection:
. Ponadto, jeśli używasz metod delegata, musisz zwrócić wartość większą niż 1,00 dla oszacowania (całkowicie nieudokumentowane zachowanie), w przeciwnym razie delegat wysokości NIE zostanie wywołany i zostanie użyta domyślna wysokość nagłówka widoku tabeli.Można to osiągnąć, ustawiając (lub zwracając)
estimatedSectionHeaderHeight
widok tabeli.Jeśli nagłówek sekcji nakłada się na komórki po ustawieniu
estimatedSectionHeaderHeight
, upewnij się, że używaszestimatedRowHeight
również.(Dodaję tę odpowiedź, ponieważ drugi akapit zawiera odpowiedź na problem, który można znaleźć po przeczytaniu wszystkich komentarzy, które niektórzy mogą przegapić.)
źródło
estimatedRowHeight
to działa jak urok :)Utknąłem w tym samym problemie, w którym nagłówek uzyskiwał zerową wysokość do i chyba że podam stałą wysokość w delegacie dla
heighForHeaderInSection
.Wypróbowałem wiele rozwiązań, w tym
Ale nic nie działało. Moja komórka też korzystała z odpowiednich autoukładów. Wiersze dynamicznie zmieniały wysokość za pomocą poniższego kodu, ale nagłówek sekcji nie.
Poprawka jest niezwykle prosta i dziwna, ale musiałem zaimplementować metody delegatów zamiast 1-wierszowego kodu dla
estimatedSectionHeaderHeight
i,sectionHeaderHeight
co w moim przypadku wygląda następująco.źródło
Swift 4+
działa (testowane w 100%)
Jeśli potrzebujesz zarówno sekcji, jak i wiersza z dynamiczną wysokością opartą na zawartości, możesz użyć poniższego kodu:
W viewDidLoad () napisz te linie:
Teraz ustawiliśmy wysokość wiersza i wysokość sekcji za pomocą metod delegata UITableView:
źródło
próbowałem
ale nagłówek z etykietą wielowierszową ma nieprawidłowy rozmiar. Dodano to, aby rozwiązać mój problem:
źródło
tableView:estimatedHeightForHeaderInSection
itableView:heightForHeaderInSection
zamiast definiować w viewDidLoad.estimatedSectionHeaderHeight
jest konieczne tylko poniżej iOS 11W moim przypadku:
self.tableView.sectionHeaderHeight = UITableViewAutomaticDimension
.ustawione w scenorysie nie działają .
zastąpienie
heightForHeaderInSection
zadziałało .środowisko testowe:
źródło
Tak, to działa dla mnie. Muszę wprowadzić więcej zmian jak poniżej:
źródło
Zmodyfikowałem odpowiedź iuriimoz . Właśnie zastąpiłem metodę viewWillAppear:
Dodaj również metodę tableView.layoutIfNeeded () do
Na iOS 10
mają efekt animacji „zanikania” na widokuWillAppear for me
źródło