2015-06-25 4 views
7

Utilizzo del simulatore iOS 8.3 e Xcode 6.3.2.Cellule di dimensionamento automatico iOS 8 con vista accessoria

Sto utilizzando la tecnica delle celle di dimensionamento automatico in iOS 8 e funziona in modo eccezionale quando la cella non ha una vista accessoria, ma si interrompe quando la cella ha una vista accessoria. Ho impostato vincoli sull'etichetta all'interno della cellula:

UILabel constraints in a UITableViewCell

allora io uso un estimatedRowHeight e impostare il rowHeight a UITableViewAutomaticDimension (sto omettendo tableView:numberOfRowsInSection: qui, ma semplicemente restituisce 3 per questo esempio):

@implementation MyTableViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    self.tableView.estimatedRowHeight = 44.0f; 
    self.tableView.rowHeight = UITableViewAutomaticDimension; 
} 

... 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    MyCell *cell = (MyCell *)[tableView dequeueReusableCellWithIdentifier:@"myCell" forIndexPath:indexPath]; 

    cell.titleLabel.text = @"Test comment Test comment Test comment Test comment Test comment Test comment Test comment Test comment Test comment Test comment Test comment "; 

    return cell; 
} 

@end 

e BAM, tutto sembra grande:

UITableView looks fine

Ma quando aggiungo una vista accessorio Storyboard, senza modificare il codice:

With accessory view

la prima cella va all'inferno. vista debugger di Xcode mi dice l'altezza etichetta è 1785 punti, e ho dovuto usare una gif per mostrare qui:

Huge cell

Ho notato che le altre due cellule vanno bene dimensioni. Ho anche notato che ruotando il simulatore, la prima cella viene ridimensionata correttamente, anche dopo essere stata ruotata di nuovo in verticale.

Qualcuno sa perché la vista accessoria lo incasina così male e cosa posso fare per risolverlo? Un progetto di esempio è disponibile allo http://github.com/UberJason/SelfSizingNightmare.

risposta

0

Sembra essere causato dall'etichetta all'interno della cella con numberOfLines = 0.

Anche se non sono sicuro del motivo, sembra che l'aggiunta dell'accessorio alla cella non consenta il layout automatico per calcolare l'altezza dell'etichetta quando viene caricata la tabella.

sono stato in grado di riparare il vostro esempio con l'aggiunta di una larghezza massima preferito l'etichetta - che sembra essere abbastanza per lasciare la figura sistema di layout l'altezza nel tempo:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    MyCell *cell = (MyCell *)[tableView dequeueReusableCellWithIdentifier:@"myCell" forIndexPath:indexPath]; 

    // Give the layout system something to help it estimate the label height  
    cell.titleLabel.preferredMaxLayoutWidth = self.titleLabel.bounds.size.width; 
    cell.titleLabel.text = @"Test comment Test comment Test comment Test comment Test comment Test comment Test comment Test comment Test comment Test comment Test comment "; 

    return cell; 
} 

In alternativa, chiamando [tableView reloadData] in viewDidAppear sembra anche risolverlo.

+0

concordo che la vista accessorio causa i problemi. In questo caso, l'impostazione di preferredMaxLayoutWidth può essere d'aiuto, ma ho avuto altre celle a ridimensionamento automatico (con layout leggermente più complicati) con viste accessorie in cui ciò non è stato di aiuto. Inoltre, chiamare [tableView reloadData] in viewDidAppear funziona, ma rende un'esperienza utente brutta perché le celle "pop" in posizione ... comunque, questo problema sembra risolto meglio in iOS 9 beta, quindi sto solo decidendo di non veramente preoccuparsi per questo. – UberJason

2

Questo è davvero un bug. Ho inviato il tuo progetto ad Apple. C'è una risposta da parte di Apple.

enter image description here

+0

Fantastico, lo controllerò in iOS 9 beta 3!Ho dato un'occhiata in beta 1 o 2, e mi è sembrato corretto, anche se le celle di auto-dimensionamento in generale potevano ancora diventare un po 'confuse a volte quando si lavora con layout più complessi con più viste. Speriamo che la beta 3 abbia reso le cose solide. – UberJason