Po aktualizacji do Xcode 6.1 beta 2, gdy uruchamiam aplikację zawierającą komórki z widokiem tabeli, asystent debugowania mówi:
Warning once only: Detected a case where constraints ambiguously suggest a height of zero for a tableview cell's content view. We're considering the collapse unintentional and using standard height instead.
Wcześniej, gdy używałem Xcode 5 w tym projekcie, otrzymywałem kilka błędów, ale te zniknęły od czasu aktualizacji. Nie mam teraz żadnych innych błędów ani ostrzeżeń. Próbowałem już dostosować rozmiary wszystkich komórek widoku tabeli, a także próbowałem użyć standardowej wysokości, ale nadal otrzymuję to samo ostrzeżenie:
Warning once only: Detected a case where constraints ambiguously suggest a height of zero for a tableview cell's content view. We're considering the collapse unintentional and using standard height instead.
Przeczytałem również wszystkie podobne tematy na ten temat, ale żadne z ich rozwiązań nie pomaga. Kiedy testuję aplikację za pomocą symulatora, aplikacja działa dobrze, z wyjątkiem obrazów, które powinny znajdować się w komórkach tableView.
ios
objective-c
swift
xcode
uitableview
David E.
źródło
źródło
Odpowiedzi:
Jak dotąd trzy rzeczy zdołały uciszyć to ostrzeżenie. Możesz wybrać najwygodniejszy dla siebie. Ale nic ładnego.
Aby ustawić domyślną wysokość komórki w viewDidLoad
Przejdź do scenorysu i zmień wysokość wiersza w widoku tabeli na inną niż 44.
Aby zaimplementować metodę delegata tabeli heightForRowAtIndexPath
Dziwne.
źródło
self.tableView.rowHeight = 44;
niewłaściwą. Błąd zniknął! dziękiNapotykasz efekt uboczny fantastycznej nowej funkcji w Tableviews w iOS8: Automatic Row Heights.
W iOS 7 albo miałeś wiersze o stałym rozmiarze (ustawionym za pomocą
tableView.rowHeight
), albo pisałeś kod, aby obliczyć wysokość twoich komórek i zwracałeś to wtableView:heightForRowAtIndexPath
. Pisanie kodu do obliczania wysokości komórki może być dość skomplikowane, jeśli masz wiele widoków w komórce i różne wysokości do rozważenia przy różnych rozmiarach czcionek. Dodaj typ dynamiczny, a proces był upierdliwy.W iOS 8 nadal możesz to zrobić, ale teraz wysokość wierszy może być określona przez iOS, pod warunkiem, że skonfigurowałeś zawartość komórki za pomocą automatycznego układu. Jest to ogromna korzyść dla programistów, ponieważ gdy zmienia się dynamiczny rozmiar czcionki lub użytkownik modyfikuje rozmiar tekstu za pomocą ustawień ułatwień dostępu, interfejs użytkownika może dostosować się do nowego rozmiaru. Oznacza to również, że jeśli masz UILabel, który może mieć wiele wierszy tekstu, twoja komórka może teraz rosnąć, aby pomieścić te, gdy komórki tego potrzebują, i zmniejszać się, gdy nie jest, więc nie ma niepotrzebnych spacji.
Komunikat ostrzegawczy, który widzisz, informuje Cię, że w komórce nie ma wystarczającej liczby ograniczeń, aby funkcja Auto Layout poinformowała widok tabeli o wysokości komórki.
Aby użyć dynamicznej wysokości komórki, która wraz z technikami wspomnianymi już na innych plakatach również pozwoli pozbyć się tej wiadomości, musisz upewnić się, że Twoja komórka ma wystarczające ograniczenia, aby powiązać elementy interfejsu użytkownika z górną i dolną częścią komórki. Jeśli wcześniej korzystałeś z automatycznego układu, prawdopodobnie jesteś przyzwyczajony do ustawiania ograniczeń górny + wiodący, ale dynamiczna wysokość wiersza wymaga również ograniczeń dolnych.
Przebieg układu działa w następujący sposób, który następuje bezpośrednio przed wyświetleniem komórki na ekranie w sposób just-in-time:
Obliczane są wymiary treści z wewnętrznymi rozmiarami. Obejmuje to UILabels i UIImageViews, gdzie ich wymiary są oparte odpowiednio na tekście lub UIImages, które zawierają. Oba te widoki uznają swoją szerokość za znaną (ponieważ ustawiłeś ograniczenia dla krawędzi końcowych / przednich, ustawiłeś jawne szerokości lub użyłeś ograniczeń poziomych, które ostatecznie ujawniają szerokość z boku na bok). Załóżmy, że etykieta zawiera akapit tekstu („liczba wierszy” jest ustawiona na 0, więc będzie się automatycznie zawijać), może mieć tylko 310 punktów w poprzek, więc przy obecnym rozmiarze czcionki jest określona na 120 punktów wysokości.
Interfejs użytkownika jest ułożony zgodnie z ograniczeniami dotyczącymi pozycjonowania. U dołu etykiety znajduje się ograniczenie, które łączy się z dolnym marginesem komórki. Ponieważ etykieta urosła do 120 punktów wysokości i jest związana z dnem komórki przez ograniczenie, musi popchnąć komórkę „w dół” (zwiększając wysokość komórki), aby spełnić ograniczenie, które mówi „dół” etykieta jest zawsze w standardowej odległości od spodu komórki.
Zgłoszony przez Ciebie komunikat o błędzie pojawia się, jeśli brakuje tego dolnego ograniczenia. W takim przypadku nie ma nic, co mogłoby „odepchnąć” dół komórki od górnej części komórki, co jest zgłaszaną niejednoznacznością: nie ma z czego wypychać dół u góry komórka zapada się. Ale Auto Layout również to wykrywa i powraca do używania standardowej wysokości wiersza.
Co jest warte, a przede wszystkim, aby uzyskać zaokrągloną odpowiedź, jeśli wdrażasz dynamiczne wysokości wierszy oparte na automatycznym układzie iOS 8, powinieneś zaimplementować
tableView:estimatedHeightForRowAtIndexPath:
. Ta metoda szacowania może używać przybliżonych wartości dla komórek i zostanie wywołana po pierwszym załadowaniu widoku tabeli. Pomaga UIKit rysować rzeczy takie jak pasek przewijania, którego nie można narysować, chyba że widok tabeli wie, ile treści może przewijać, ale nie potrzebuje całkowicie dokładnych rozmiarów, ponieważ jest to tylko pasek przewijania. Dzięki temu obliczenie rzeczywistej wysokości wiersza może zostać odroczone do momentu, w którym komórka jest potrzebna, co jest mniej intensywne obliczeniowo i umożliwia szybsze przedstawienie UITableView.źródło
Miałem ten problem po utworzeniu niestandardowego
UITableViewCell
i dodaniu moich podglądów do komórki zamiast jejcontentView
.źródło
Aby rozwiązać ten problem bez metody programowej, dostosuj wysokość wiersza widoku tabeli w Inspektorze rozmiaru z serii ujęć.
źródło
To jest problem z automatycznym układem. Upewnij się, że podglądy podrzędne mają wszystkie ograniczenia. W moim przypadku brakowało ograniczenia dolnego dla etykiety tytułu w komórce. Kiedy to dodałem, ostrzeżenie zniknęło i wszystko pokazało się idealnie.
źródło
Po prostu włącz samoczynne ustalanie rozmiaru komórek widoku tabeli
I upewnij się, że dodane ograniczeń na wszystkich stronach
UITableViewCell
as-Przykładowy link 1
Przykładowy link 2
źródło
UITableViewAutomaticDimension
została zmieniona naUITableView.automaticDimension
Jeśli używasz komórki statycznej lub komórki dynamicznej, po prostu dodaj trochę wysokości wiersza do widoku tabeli w tabeli inspektora i odznacz opcję automatyczną po prawej stronie wysokości wiersza, to oznacza, że przestaniesz otrzymywać to ostrzeżenie.
źródło
Dostałem dziś to ostrzeżenie. Oto, co sprawiło, że zniknął dla mnie (w kreatorze interfejsów)
1. Ustaw pole wysokości wiersza dla widoku tabeli na inne niż 44 2 Ustaw pole wysokości wiersza dla komórki tableView na inne niż 44
Nie musiałem dokonywać żadnych zmian w kodzie
źródło
W moim przypadku programowo budowałem komórkę i ciągle otrzymywałem ten błąd.
Byłem dodawanie subviews i ograniczeń w
UITableViewCell
„sinit
metody takie jak to:Rozwiązałem problem, dodając je do komórki
contentView
:źródło
contentView
, a nieUITableViewCell
bezpośrednio.Ustaw szacowaną wysokość wiersza na zero, a ostrzeżenie zniknie:
źródło
Ja też doświadczyłem tego ostrzeżenia, przechodząc na Xcode 6 GM. Otrzymałem ostrzeżenie tylko wtedy, gdy obróciłem urządzenie z powrotem do pierwotnej pozycji.
Używam niestandardowych UITableViewCells. Widok tabeli scenorysu jest ustawiony na mój niestandardowy rozmiar (w moim przypadku 100,0). Chociaż komórki tabeli renderują się poprawnie, tak jak w poprzednich wersjach, nie podobał mi się komunikat ostrzegawczy.
Oprócz powyższych pomysłów dodałem to
Renderowanie ekranu ... reaguje na obrót i nie ma więcej komunikatów ostrzegawczych.
źródło
W xcode 6.0.1 usunąłem te ostrzeżenia, określając wysokość wiersza za pomocą:
źródło
Jeśli utworzyłeś niestandardową tableViewCell dla tableView, upewnij się, że dałeś komórkom zarówno dolne, jak i górne ograniczenia, możesz również otrzymać ten komunikat, jeśli podglądy podrzędne w niestandardowych komórkach są wyrównane w środku Y, co nie wyskoczy żadnego komunikatu o błędzie, ale zepsuje się z identyfikacją wysokości wiersza dla widoku tabeli po kolei, jak na załączonym obrazku , tutaj mamy zarówno górne, jak i dolne ograniczenia
Podczas tworzenia niestandardowej komórki dla tableView musisz określić wysokość wiersza lub górne i dolne ograniczenia dla niestandardowych widoków podrzędnych komórki w komórce (np. Etykieta w niestandardowej komórce, jak na poniższym obrazku)
Ale jeśli to nie zadziała, możesz spróbować ustawić wysokość wiersza dla swojej komórki, zamiast robić to automatycznie, jak na tym obrazku
Ale upewnij się, że jeśli wyłączysz to automatyczne zaznaczenie, musisz dostosować rozmiar wiersza do zmian programowych, które można było zrobić automatycznie
źródło
W scenorysie ustaw
cell
Row height
pole o takiej samej wartości jakRow height
wtableView
(oba z tą samą wartością działały dla mnie).Jeśli dodasz
heightForRowAtIndexPath
funkcję do swojego kodu, może to spowodować problem z wydajnością, ponieważ zostanie wywołana dla każdej komórki, więc bądź ostrożny.źródło
Możesz również zobaczyć ten komunikat, jeśli Twoje jedyne ograniczenia są ustawione na wyrównanie wszystkich elementów w pionie i nie masz / nie chcesz określonej wysokości komórki. Jeśli ustawisz górne / dolne ograniczenie dla elementu, ostrzeżenie zniknie.
źródło
Miałem ten problem, gdy moje etykiety i widoki w niestandardowym tableViewCell były ograniczone do customCell, a nie jego widoku zawartości. Kiedy usunąłem ograniczenia i połączyłem je z komórkami Content View, problem został rozwiązany.
źródło
Otrzymałem ten sam komunikat o błędzie, upewnij się, że wszystkie punkty sprzedaży są prawidłowe, takie jak widok tabeli i ograniczenia dotyczące widoku tabeli
źródło
Jeśli wykonujesz dynamiczne obliczenia wysokości,
źródło
Mam również podobny problem z niestandardową komórką widoku tabeli, która ma dynamiczną wysokość wiersza. Dynamiczna wysokość nie została odbita i otrzymała to samo ostrzeżenie w konsoli. Rozwiązaniem jest dodanie podglądów podrzędnych do komórki zamiast contentView. Przy okazji, stworzyłem podglądy programowo.
źródło
Mam ten problem na
TableViewCell
s, gdzie ograniczenia są ustawione na inicjalizację, ale gdzie zawartość komórki jest ładowana później, oznacza to, że silnik autoukładu nie może określić wysokości. Inne rozwiązania tutaj nie działają, ponieważ potrzebuję wysokości komórkiUITableView.automaticDimension
.Właśnie dodałem dodatkowe ograniczenie do komórki:
źródło
Otrzymałem dziś to ostrzeżenie. Wszystko, co zrobiłem, to po prostu dodanie jednej dodatkowej linii do mojego kodu
dodaj tę linię kodu wewnątrz
a końcowy kod wygląda jak
ten kod zwiększy wysokość komórki wiersza tabeli do 200, domyślna wysokość to 44
źródło
Mam ten sam błąd, z powodu tej linii ten błąd został pokazany
self.layer.backgroundColor = UIColor (white: 1, alpha: 0,2) as! CGColor
Po prostu zmieniam wiersz w następujący sposób, aby naprawić błąd
self.layer.backgroundColor = UIColor (biały: 1, alfa: 0,2) .cgColor
źródło