Chciałbym skorzystać z dynamicznej wysokości UITableViewCell
nowa w systemie iOS 8. Potrzebuję umieścić UICollectionView
w ramach UITableViewCell
. Chcę upewnić się, że wszystkie komórki w widoku kolekcji są widoczne na ekranie, więc komórka tabeli powinna zwiększyć wysokość, aby pasowała do widoku kolekcji. Mam prawie to działa. Po prostu nie udało mi się uzyskać odpowiedniej wielkości komórki tabeli - jest ona zbyt długa lub zbyt krótka, a niektóre problemy z układem są widoczne, dopóki nie wejdę w interakcję z tabelą (więcej informacji poniżej).Zaktualizuj wysokość widoku kolekcji, aby pasowała do wszystkich komórek w komórce widoku tabeli, korzystając z automatycznego układu
Skonfigurowałem ograniczenia układu automatycznego dla widoku kolekcji do komórki tabeli contentView
: prowadzącej, końcowej, górnej i dolnej. Następnie utworzyłem ograniczenie wysokości w widoku kolekcji, dzięki czemu mogę zaktualizować jego wartość constant
w locie po obliczeniu odpowiedniej wysokości, aby zmieściła się we wszystkich komórkach w widoku kolekcji (ponieważ nie sądzę, że można to zrobić automatycznie).
Tutaj jest reszta konfiguracji.
viewDidLoad {
self.tableView.rowHeight = UITableViewAutomaticDimension
self.tableView.estimatedRowHeight = 44
}
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
let cellDimension = self.collectionView.frame.size.width/7 //always 7 columns
let flowLayout = self.collectionView.collectionViewLayout as! UICollectionViewFlowLayout
flowLayout.itemSize = CGSizeMake(cellDimension, cellDimension)
self.collectionViewHeightConstraint.constant = cellDimension * 4 //always 4 rows
}
nie wdrożyły heightForRowAtIndexPath
.
Ta konfiguracja powoduje występowanie sprzecznych ograniczeń pionowych. Próbowałem zmniejszyć priorytet ograniczeń i zmienić relację w kilku kombinacjach, ale żadna nie spowodowała pożądanego zachowania. Jeśli zmniejszę priorytet ograniczenia wysokości do 999, komórka widoku tabeli jest na początku zbyt wysoka, ale po przewinięciu w górę iw dół widoku tabeli wysokość komórki tabeli zostanie zaktualizowana do oczekiwanej wysokości. W przypadku niektórych innych kombinacji wynikiem jest zbyt krótka komórka tabeli, ale cały widok kolekcji wykrwawia się, komórka tabeli jest zbyt krótka, a widok kolekcji jest obcięty lub komórka tabeli jest zbyt wysoka, w zależności od tego, jaki priorytet i relacje, które zastosowałem wobec ograniczeń. Ponadto komórki widoku kolekcji nie są wyświetlane w odpowiednim rozmiarze, podczas gdy widok jest animowany (ale są one poprawnie dopasowane do czasu zakończenia animacji czasu) lub jeśli ponownie załaduję tabelę, komórki widoku kolekcji mają nieprawidłowy rozmiar, dopóki nie przewińę stół.
Jak mogę rozwiązać te problemy z wyglądem, aby uzyskać wysokość komórki widoku tabeli dynamicznej, która zawiera w pełni widoczny widok kolekcji z dynamicznym rozmiarem komórki na podstawie szerokości wyświetlania?
Proponuję zamiast tego przesunąć ustawienie RowHeight "self.tableView.rowHeight =" z ViewDidLoad na ViewWillAppear, możesz również sprawdzić to pytanie. [link] (http://stackoverflow.com/questions/29263875/uitableviewcells-initial-load-view-display-issue) –
@KevinHorgan To nie miało żadnej zauważalnej różnicy. – Joey
Aby funkcja autolayout działała poprawnie w UITableViewCell, musisz dodać ograniczenia dla wszystkich układów w containerView bez braków.W przeciwnym razie autolayouts nie będzie działać poprawnie. Sprawdź poniższy link, który zawiera szczegółowe informacje o konfiguracji autolayout dla tableviewcell http: // stackoverflow .pl/questions/29231390/uitableview-strange-layout-behaviour-changes-on-scroll/29327082 # 29327082 – Ram