Myślę, że główną przyczyną jest to, że estimatedRowHeight
jest używany do przyjmowania założeń na temat podstawowej UIScrollView.contentOffset
, ale to zawsze będzie błędne z definicji, ponieważ jest oszacowaniem. Rzeczywiste wysokości rzędów są całkowicie różne w zależności od zawartości komórki i orientacji urządzenia.Jak mogę naprawić lub obejść tę tabelę Wywołać błąd autolayout textField?
Nawet jeśli zaimplementuję estimatedHeightForRowAtIndexPath
w celu zapewnienia dokładniejszych szacunków, usterki nadal występują.
Tak więc, gdy zaczynasz od góry i przewijasz w dół, wszystko jest w porządku, ponieważ TableView uczy się rzeczywistych wysokości komórek, zachowując synchronizację contentOffset z pozycjami komórek. Ale gdy tylko zmienisz wszystkie rzeczywiste wysokości komórek, więc UITableView
jest obecnie niezsynchronizowany, nie wie, dokąd przejść.
Ale są jeszcze dziwniejsze rzeczy dzieją się też czasami komórka UITextField
skończy się na szczycie innej komórki, i pozostają tam zatrzymany ...
Zresztą ja gotuje to wszystko na prostym przykładzie.
https://github.com/trapper-/autolayout-glitch
- test z iPhone, a jeśli za pomocą symulatora następnie włączyć klawiaturę ekranową.
- Zobaczysz wiele wizualnych usterki po prostu bawiąc się przewijając, wybierając pola i obracając.
- Dla prostego powtarzalnego przykładu.
- Przewiń w dół.
- Wybierz jedną z ostatnich kilku
UITextField's
, abyUITableView
trzeba było przewinąć, aby upewnić się, że pole będzie widoczne. - Obróć urządzenie.
Chociaż nie jest idealny, ale wywołanie reloadData w instancji tableView powinno pomóc. Spróbowałeś? –
Autolayout nie działa dobrze z UITableView. Rozważ skorzystanie z CollectionView. To jest świetny post na temat granic UITableView: https://pspdfkit.com/blog/2017/the-case-for-deprecating-uitableview/ –
Czy mówisz, że 'UICollectionView' nie ma tych samych rodzajów usterki? Jeśli tak, byłoby to świetne rozwiązanie. – trapper