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.

Kqtr
źródło
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

Kqtr
źródło
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.

Jaafar Barek
źródło
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,