Mam niestandardową komórkę widoku tabeli, która korzysta z automatycznego układu i ma wskaźnik ujawnienia jako widok akcesoriów. Wielkość komórki komórek na ekranie są całkowicie błędne, gdy wyświetlona pierwsza:Niestandardowy UITableViewCell z widokiem układu automatycznego i akcesoriów
Jak widać komórka trwa około 1,5 ekranów wartości przestrzeni:
Jednak gdybym obracać urządzenie i obrócić z powrotem wygląda dobrze:
Jak widać tutaj, zrobiłem nic skomplikowanego:
Mam bardzo nieidealnym obejścia, która jest do zrobienia:
-(void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[self.tableView reloadData];
}
Ale to oczywiście powoduje „błysk” Kiedy po raz pierwszy zobaczyć na ekranie. W bardziej skomplikowanym scenariuszu flash jest o wiele bardziej oczywisty.
mam innego obejścia ale to powoduje wyjątek układu auto:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
BasicCell *cell = [tableView dequeueReusableCellWithIdentifier:@"BasicCell" forIndexPath:indexPath];
cell.basicLabel.text = @"Hello this is just some text that should get the label to go over multiple lines";
[cell.basicLabel layoutIfNeeded];
return cell;
}
Wyjątek:
Przynajmniej ta metoda nie daje mi UI miganie.
Jeśli wyjmę widok akcesoriów, będzie on działał idealnie dobrze.
UPDATE: Dodałem projekt próbka GitHub: https://github.com/fwaddle/TableCellAccessoryTest
Aktualizacja # 2: Okazuje się, że kolejny obejść ten błąd jest do układu komórkę w kodzie. Po prostu próbowałem zrobić to samo w kodzie i nie rzuciłem ostrzeżenia i działałem dobrze. Wygląda jak błąd IB.
Wszelkie pomysły dotyczące obejścia tego problemu? Dzięki.
Ustaw prawidłowo wiązania wewnątrz komórki, co czasami może być trudne, a następnie ustaw właściwość 'rowHeight' w widoku tabeli na wartość' UITableViewAutomaticDimension'. Również to nie jest wyjątek, to jest ostrzeżenie przed błędną konfiguracją. Niezatłoczony wyjątek zakończy Twoją aplikację. – Michael
Hi @Nikita, więzy są ustawione prawidłowo i ustawiłem prawidłowo wysokość wiersza: - (void) viewDidLoad { [super viewDidLoad]; self.tableView.rowHeight = UITableViewAutomaticDimension; self.tableView.estimatedRowHeight = 45; } Ale uważam, że nie stanowi to wyjątku. – Mof
Myślę, że to jest problem z Twoimi ograniczeniami. Wyczyść kompilację i usuń wiązania, które nie są używane w układzie, a następnie skompiluj i uruchom. – Michael