Ho una cella di visualizzazione tabella personalizzata che utilizza il layout automatico e ha un indicatore di divulgazione come vista accessoria. La dimensione cellulare delle cellule sullo schermo sono completamente sbagliato quando visualizzato prima:UITableViewCell personalizzato con visualizzazione automatica del layout e degli accessori
Come si può vedere la cella sta prendendo circa un 1,5 schermate di spazio:
Tuttavia, se ruoto il dispositivo e ruotare di nuovo si guarda bene:
Come si può vedere qui, ho fatto nulla di complicato:
ho una soluzione molto non ideale, che è quello di fare:
-(void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[self.tableView reloadData];
}
Ma che provoca ovviamente un 'flash' la prima volta che vedi sullo schermo. In uno scenario più complicato il flash è molto più ovvio.
ho un'altra soluzione, ma questo provoca un'eccezione Layout Automatico:
- (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;
}
Eccezione:
Almeno questo metodo non mi danno UI lampeggiante.
Se rimuovo la vista accessoria, funziona perfettamente.
UPDATE: Ho aggiunto un progetto di esempio per GitHub: https://github.com/fwaddle/TableCellAccessoryTest
UPDATE # 2: Si scopre che un altro ovviare a questo problema è di layout la cella in codice. Ho appena provato a fare la stessa cosa nel codice e non ha lanciato l'avviso e ha funzionato bene. Sembra un bug IB.
Qualche idea su come aggirare questo problema? Grazie.
Imposta i tuoi vincoli correttamente all'interno della tua cella, che a volte può essere complicato, quindi imposta la proprietà 'rowHeight' sulla tua vista tabella su' UITableViewAutomaticDimension'. Inoltre non è un'eccezione, è un avvertimento per l'errata configurazione. Un'eccezione non risolta interromperà l'applicazione. – Michael
Ciao @Nikita, I vincoli sono impostati correttamente e ho impostato correttamente il valore rowHeight: - (void) viewDidLoad { [super viewDidLoad]; self.tableView.rowHeight = UITableViewAutomaticDimension; self.tableView.estimatedRowHeight = 45; } Ma io sostengo che non si tratta di un'eccezione. – Mof
Penso che questo sia un problema con i tuoi vincoli. Pulisci la tua build e rimuovi i vincoli che non vengono utilizzati nel layout, quindi crea ed esegui. – Michael