/ / UITableView zmień rozmiar dzięki automatycznemu układowi na rotacji - ios, widok uitable, rotacja, automatyczne usuwanie

Zmiana rozmiaru UITableView z automatycznym układem na obrót - ios, uitableview, rotacja, autolayout

Mam jakiś dziwny błąd i nie mogę znaleźć rozwiązania.

Mam UITableView za pomocą automatycznego układu. (Przyciągnij do rodzica ze wszystkich czterech stron). Jeśli obracam urządzenie, jest renderowane poprawnie, ale jeśli spróbuję go przewinąć, przewijaj się po lewej stronie ekranu.

wprowadź opis obrazu tutaj

Czerwony kwadrat to obszar przewijania.

Kolejny problem, który zakładam, jest związany z tym, gdy próbuję dodać UIView jako subView do UITableView.

jeśli dodam:

CGRect frame = CGRectMake(0, 200, self.table.frame.size.width, 5);
UIView * mainView = [[UIView alloc]initWithFrame:frame];
mainView.backgroundColor = [UIColor redColor];
[self.table addSubview:mainView];

jest w porządku, ale jeśli lubię:

UIView * mainView = [[UIView alloc]init];
mainView.backgroundColor = [UIColor redColor];
mainView.translatesAutoresizingMaskIntoConstraints = NO;
[self.table addSubview:mainView];

[self.table addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(200)-[mainView(20)]" options:NSLayoutFormatDirectionLeadingToTrailing metrics:nil views:NSDictionaryOfVariableBindings(_table, mainView)]];

[self.table addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[mainView]|" options:NSLayoutFormatDirectionLeadingToTrailing metrics:nil views:NSDictionaryOfVariableBindings(_table, mainView)]];

na błąd:

*** Assertion failure in -[UITableView layoutSublayersOfLayer:], /SourceCache/UIKit/UIKit-2903.23/UIView.m:8540

Odpowiedzi:

2 dla odpowiedzi № 1

Dla opcji Autolayout włączone - (Nie ustawiaj żadnych ramek - da to dziwne zachowanie)
Ograniczenia dotyczące automatycznego usuwania powinny być następujące:


Automatyczna linia jest włączona

Automatyczna linia jest włączona


Twoje ograniczenia powinny się podobać

jeśli wyłączysz automatyczną wysyłkę, nie musisz wprowadzać żadnych zmian do historii lub kodu


1 dla odpowiedzi nr 2

Próbuję ustawić losowy estreRowHeight i wydaje się, że naprawił błąd. Prawdopodobnie będzie to błąd firmy Apple. Wersja Swift:

class MyTableView: UITableView {
override func layoutSubviews() {
self.estimatedRowHeight = 120
super.layoutSubviews()
}
}

0 dla odpowiedzi № 3

Tutaj użyj

CGRect frame = CGRectMake(0, 200, self.table.bounds.size.width, 5);

zamiast

CGRect frame = CGRectMake(0, 200, self.table.frame.size.width, 5);

0 dla odpowiedzi nr 4

Wygląda na to, że zmiany orientacjisuperview nie jest przekazywany do twojego dziecka (tableView). Spróbuj umieścić następujące elementy w willAnimateRotationToInterfaceOrientation: (UIInterfaceOrientation) toInterf‌ czas trwania aceOrientation: (NSTimeInterval) czas trwania

self.tableView.frame = self.view.bounds;

Miałem podobny problem z UITableVieww widoku kontenera, który nie był właściwie przewijany podczas obracania do pionu do krajobrazu. Przewijany był tylko mały kawałek stołu. Potem wszystko działa dobrze.