2015-09-21 18 views
6

W mojej aplikacji mam niestandardowe tableViewCells ze stałym współczynnikiem (16x9). Aby to osiągnąć, umieściłem widok w komórce, naprawiłem go do jego widoku nadrzędnego (chociaż zrobiłem to w konstruktorze interfejsów: V/H:|-[innerView]-|). Umieściłem na nim także ograniczenie proporcji.UITableViewAutomaticDimension nie działa poprawnie w systemie iOS 9

W mojej tabeliViewController używam UITableViewAutomaticDimension jako wysokość komórki tabeli.

Szacowana wysokość wiersza wynosi 180, co jest dokładnym rozmiarem komórki na wyświetlaczu o szerokości 320 pikseli (jak widać, jak widać).

Nadal wdrażam wersję 8.4, ale podczas uruchamiania projektu na urządzeniu z iOS 9 otrzymuję masę ostrzeżeń o automatycznym układzie, mimo że wszystko działa dobrze i wygląda idealnie.

Samo ostrzeżenie jest absolutnie poprawne. Są dwa ograniczenia, których nie chcę - te, które iOS dodają same.

2015-09-29 11:24:57.771 app[1039:324736] Unable to simultaneously satisfy constraints. 
    Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
    "<NSLayoutConstraint:0x147d3e0d0 UIView:0x14901ff70.height == 0.5625*UIView:0x14901ff70.width>", 
    "<NSLayoutConstraint:0x147dd0210 H:|-(0)-[UIView:0x14901ff70] (Names: '|':UITableViewCellContentView:0x14901f960)>", 
    "<NSLayoutConstraint:0x147deeca0 V:|-(0)-[UIView:0x14901ff70] (Names: '|':UITableViewCellContentView:0x14901f960)>", 
    "<NSLayoutConstraint:0x149053c30 V:[UIView:0x14901ff70]-(0)-| (Names: '|':UITableViewCellContentView:0x14901f960)>", 
    "<NSLayoutConstraint:0x147dbc2b0 H:[UIView:0x14901ff70]-(0)-| (Names: '|':UITableViewCellContentView:0x14901f960)>", 
    "<NSLayoutConstraint:0x149070800 'UIView-Encapsulated-Layout-Height' V:[UITableViewCellContentView:0x14901f960(179.5)]>", 
    "<NSLayoutConstraint:0x1490707b0 'UIView-Encapsulated-Layout-Width' H:[UITableViewCellContentView:0x14901f960(320)]>" 
) 

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x147d3e0d0 UIView:0x14901ff70.height == 0.5625*UIView:0x14901ff70.width> 

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger. 
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful. 

Jedyne, co widzę tutaj, to brakujące 0,5 piksele, które zostały w jakiś sposób magicznie odjęte.

+0

Jedyne, co widzę tutaj, to brakujące 0,5 piksele, które iOS odejmuje w jakiś magiczny sposób? Gdzie są te informacje? – BangOperator

+0

@somexyz odczytać zalogowane ograniczenia: 'V: [UITableViewCellContentView: 0x14da0ff60 (179.5)]' –

Odpowiedz

1

Kwestia jest dwoma ograniczeniami, które widok tabeli automatycznie dodaje. UIView-Encapsulated-Layout-Wysokość i szerokość to prawdopodobnie wysokość i szerokość widoku tabeli obliczonego dla komórki podczas początkowego obciążenia, w oparciu o ograniczenia komórki w tym czasie.

"<NSLayoutConstraint:0x149070800 'UIView-Encapsulated-Layout-Height' V:[UITableViewCellContentView:0x14901f960(179.5)]>", 
"<NSLayoutConstraint:0x1490707b0 'UIView-Encapsulated-Layout-Width' H:[UITableViewCellContentView:0x14901f960(320)]>" 

Jako priorytety dla tych ograniczeń to 1000, co można zrobić, to obniżyć swoje priorytety wysokość i szerokość przymusu i niech obudowane rozmiar mają być stosowane w razie potrzeby (przy obciążeniu).

+0

To rzeczywiście pomogło. Dzięki za - krótkie - wyjaśnienie czasu (załadowane). Czy możesz powiedzieć coś o różnicy między systemem iOS 8 i iOS 9? Zdecydowanie potrzebuję/chcę wiedzieć, dlaczego tylko iOS 9 robi to inaczej ... –

+0

Naprawdę nie wiem, co zmieniło się w automatycznym układzie graficznym w iOS 9, ale tak się też stało w iOS 8. – Istvan

+0

Tak. Mogło to również nastąpić w systemie iOS 8, o ile mówisz o tym mniej lub bardziej ogólnym ostrzeżeniu o automatycznym układzie. W moim przypadku to ostrzeżenie pojawia się tylko w systemie iOS9, a nie 8, dlatego otworzyłem to pytanie. –

1

Wygląda na to, że dodano dwa ograniczenia współczynnika dodane w dwóch różnych widokach.

One, które powinny być Istnieje

<NSLayoutConstraint:0x14d939e00 UIView:0x14da107f0.width == 
1.77778*UIView:0x14da107f0.height> 

ma adresu pamięci 0x14d939e00 dodanej na UIView z adresu 0x14da107f0.

Drugi z nich pęka.

<NSLayoutConstraint:0x14c5eae90 UIView:0x14c5ead30.height == 
    0.5625*UIView:0x14c5ead30.width> 

Ten został dodany do UIView (0x14c5ead30). Poszukaj tego widoku i usuń ograniczenie tego współczynnika.

+0

Przepraszam, pomieszałem początek tego z końcem innego dziennika. Dlatego ani adres, ani wartości nie pasują do siebie. Jest tylko jedno ograniczenie i ponieważ działa dobrze w systemie iOS 8, nie sądzę, że jest to ogólny problem z automatycznym układem. –

Powiązane problemy