2015-06-08 14 views
6

Mam statyczny UITableView z 3 rzędami w 1 sekcji. Każdy wiersz zawiera UITextView, który powinien zmienić rozmiar w zależności od zawartości. Każdy z obiektów UITextView ma wyłączone przewijanie, aby wymusić jego wzrost. Każdy jest przypięty na wszystkich 4 stronach do contentView komórki i nie ma żadnych innych ograniczeń.UITextView nie zmienia rozmiaru poprawnie tylko na iPadzie

Po uruchomieniu na iPadzie (rzeczywistym lub symulowanym) komórka zmienia rozmiar na pojedynczy wiersz tekstu, niezależnie od zawartości UITextView. Kiedy sprawdzam hierarchię widoku w debugerze, widzę, że wysokość UITextView jest ustawiana na 27,5, mimo że wysokość widoku treści wynosi 183,5. Wydaje się, że jest to wynikiem ograniczenia wysokości na UITableViewCellContentView, które ogranicza wysokość komórki. To nie jest ograniczenie, które ustawiam. Mój kontroler widoku tabeli nie ma metody heightForRow lub cellForRow, ponieważ jest statycznym widokiem tabeli i używa automatycznego układu dla wszystkiego. Nie wiem, jak to ograniczenie jest dodawane.

enter image description here

Oto dokładny samej hierarchii z dokładnie tych samych treści dokładnie w tym samym punkcie, gdy działa na iPodzie touch. Pamiętaj, że tym razem wysokość UITextView i wysokość treści są takie same. W takim przypadku ograniczenie na wysokość UITableViewCellContentView jest wystarczająco duże, aby pomieścić wysokość UITextView.

enter image description here

W obu przypadkach jest to samo źródło wykonywania i wyświetlania tej samej treści. Ta treść zawiera krótkie wiersze tekstu z powrotami karetki, dlatego powinna mieć taki sam rozmiar treści w obu rozmiarach ekranu. UITextView chce zmienić jego wysokość na 183,5, ale na iPadzie wysokość komórki jest niepotrzebnie ograniczana przez ograniczenie generowane przez iOS.

Oto kod dla viewDidLoad:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    //shrink the uiswitch a little bit 
    self.displayRegexCharsSwitch.transform = CGAffineTransformMakeScale(0.70, 0.70); 

    //these next 2 lines set up the table to automatically resize based on content 
    self.tableView.estimatedRowHeight = 100.0f; 
    self.tableView.rowHeight = UITableViewAutomaticDimension; 

    //next line hides the blank cells 
    self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero]; 

    //these are needed on iPad or rows with accessory view don't resize 
    [self.tableView beginUpdates]; 
    [self.tableView endUpdates]; 
} 

Ponownie, nie ma heightForRow lub cellForRow w kontroler widoku tabeli spowodowane użyciem statycznego widoku tabeli.

Jestem zdziwiona. Dlaczego UITextField zgłasza inny rozmiar zawartości na iPadzie niż na iPodzie, jeśli zawartość jest taka sama, a kod jest taki sam? Z widoku hierarchii jasno wynika, że ​​UITextField wewnętrznie wie, że jego wysokość wynosi 200, ale contentSize zwraca 27,5. Jest to statyczny widok tabeli, więc nie ma metody heightForRow ani metody cellForRow. Jestem zależny od automatycznego układu, aby zarządzać całym układem - który robi poprawnie na iPadzie.

EDIT

FYI - Konstrukcja oparta jest wyłącznie na any/jakiejkolwiek klasy wielkości.

enter image description here

+0

Jaki rozmiar klasa widok robisz większość ograniczeń w?Najlepiej używać Any/Any, chyba że masz rzeczywiste różnice między iPadem a iPhonem. Musisz również oglądać z popover, ponieważ klasa wielkości w popover ma niewielką szerokość. Stąd kodowanie w klasie Any/Any size jest najbezpieczniejsze. Jego klasa wielkości dźwięków związana, ponieważ wydaje się, że ograniczenia nie są spójne. –

+0

@RoryMcKinnel Na tym ekranie używam tylko klasy Any/Any size - zobacz wydruk ekranu, który właśnie dodałem na końcu wpisu. Jedną z dziwacznych rzeczy jest przeniesienie tylko tego scenariusza do nowego projektu pojedynczego widoku, aby sprawdzić, czy mogę wyizolować problem z dala od wszystkiego, co dzieje się w moim projekcie, a ekran jest prawidłowo umieszczany w nowym projekcie na iPadzie i iPhonie, mimo że storyboard jest identyczny, a kontroler widoku tabeli jest identyczny. Czy może istnieć ustawienie w całym projekcie, które wpływa na układ? –

Odpowiedz

4

Found it! Przenieśliłem układ do nowego projektu, aby odizolować problem od innych rzeczy, które dzieją się w projekcie. Problem układu nie pojawił się w nowym projekcie. Porównałem więc ogólne ustawienia projektu i zauważyłem, że nowy projekt miał docelowy poziom wdrożenia systemu iOS 8.3, a pierwotny projekt miał docelowy poziom wdrożenia systemu iOS 6.0. Kiedy ustawiam nowy cel wdrożenia projektu na iOS 6.0, pojawił się problem z układem. To samo dotyczy iOS 7.0. Jednak w systemie iOS 8.0 i nowszym problem znika. Czas, aby zmusić swoich użytkowników do aktualizacji do iOS 8.

enter image description here

Powiązane problemy