Autolayout jest ignorowany w niestandardowym UITableViewCell


92

Pomimo ustawienia ograniczeń dla wszystkich elementów, w tym pionowych potrzebnych komórce do obliczenia jej wysokości, auto-układ wydaje się być ignorowany: wszystkie komórki są ściśnięte.

Oto zrzut ekranu wyniku i ograniczeń w scenorysie. wprowadź opis obrazu tutaj

wprowadź opis obrazu tutaj

W VC, który przechowuje tableView, oto kod w viewDidLoad:

tableView.estimatedRowHeight = 120.0
tableView.rowHeight = UITableViewAutomaticDimension

Skomentowanie drugiej linii daje komórki o wysokości 120,0, ale automatyczne układanie jest również ignorowane.

Dzięki


Aktualizacja

Aby uprościć interfejs, zostawiłem jedną etykietę z ograniczeniami:

  • Wiodąca przestrzeń do superviewu
  • Najlepsza przestrzeń do nadzoru
  • Stała szerokość i wysokość (100 i 100)
  • Od dołu do marginesu kontenera, aby upewnić się, że komórka ma wszystkie pionowe ograniczenia określające jej wysokość

A dzięki temu uproszczonemu interfejsowi autoukład nadal nie jest brany pod uwagę, co sugeruje, że problem nie wynikał ze źle ustawionych ograniczeń.

W Inspektorze rozmiaru wysokość wiersza jest ustawiona na 120 i zaznaczona jest opcja Niestandardowa. Komórka ma odpowiednią klasę niestandardową, identyfikator ponownego wykorzystania komórki jest poprawny.


Aktualizacja: znaleziono rozwiązanie

To był prosty błąd, zobacz moją odpowiedź poniżej.


Sprawdź terminal debugowania - czy są tam jakieś dzienniki NSLayoutConstraint sugerujące, że coś nie działa zgodnie z oczekiwaniami?
— Matthew Hallatt,

Nic nie pojawia się w terminalu debugowania @MatthewHallatt, dziękuję.
— Kqtr,

@Kqtr spróbuj skomentować te dwie linie, a następnie uruchom go normalnie raz, aby sprawdzić, czy jest jakaś zmiana?
— Tushar Sharma,

@TusharSharma Skomentowanie dwóch wierszy ma taki sam efekt, jak skomentowanie tylko wiersza rowHeight: komórka ma wysokość 120,0, ale układ automatyczny nie działa.
— Kqtr

1
Czy narzędzie do tworzenia interfejsów wyświetla jakieś ograniczenia jako brakujące lub niejednoznaczne? Sprawdź, czy nie ma żółtego lub czerwonego wykrzyknika.
— Matthew Hallatt,

Odpowiedzi:


249

Autoukład został zignorowany, ponieważ zarówno prototypowa komórka, jak i UIView komórki otrzymały niestandardową klasę komórek w IB.

Ustawienie UIView z powrotem na klasę UIView rozwiązało problem.

żeby było jasne


2
Utknąłem w tym problemie godzinami i to go rozwiązuje, dziękuję!
— candidev

zmarnowałem prawie cały dzień, aż tu przyjechałem .... Tysiące dzięki.
— Renascent

-3

Myślę, że problem polega na tym, że wdrażasz:

func tableView(_ tableView: UITableView, heightForRowAt indexPath: 
IndexPath) -> CGFloat {

 return x
}

Musisz usunąć tę funkcję, aby widok tabeli mógł obliczyć automatyczną wysokość komórek.


Dzięki, niestety tego nie nadpisuję: właściwie nie mam nawet delegata dla tego tableView, tylko źródło danych.
— Kqtr,

Czy ustawiłeś ograniczenia widoku tekstu na wszystkie dla krawędzi komórki? Czy wyłączyłeś przewijanie textView?
— Jaafar Barek

Etykieta wieloliniowa (0 linii) ma ograniczenia dotyczące 1) odstępów w pionie z numerem po lewej stronie 2) górnego miejsca do superview 3) końcowego odstępu do superview i 4) dolnego obszaru z etykietą Asked By.
— Kqtr,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.