2016-02-03 12 views
6

È possibile impostare l'altezza minima per cella? Io uso dinamico:Altezza cella minima con UITableViewAutomaticDimension

tableView.estimatedRowHeight = 83.0 
tableView.rowHeight = UITableViewAutomaticDimension 

Ma ho bisogno di impostare l'altezza minima per il cellulare quando il mio news title label text è in una sola riga.

risposta

25

Hai provato a creare un vincolo nella vista personalizzata di UITableViewCell di height >= 60.0?

+0

come fare? – aaisataev

+2

come lo hai risolto esattamente? puoi fornire alcune istruzioni? – Hlung

+2

puoi mostrare dettagli su come funziona? –

0

Nel codice di layout automatico della cella personalizzata (sia Interface Builder che a livello di codice), aggiungere i vincoli appropriati.

E.g. (Programmaticamente in una cella personalizzata)

UILabel * label = [UILabel new]; 
    [self.contentView addSubview:label]; 
    NSDictionary * views = NSDictionaryOfVariableBindings(label); 
//Inset 5 px 
    [self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-5-[label]-5-|" options:0 metrics:nil views:views]]; 
    [self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-5-[label]-5-|" options:0 metrics:nil views:views]]; 
// height >= 44 
    [self.contentView addConstraint:[NSLayoutConstraint constraintWithItem:self.mainLabel attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationGreaterThanOrEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:44.0]]; 
5

Capito. Fatto funzionare come di seguito.

Trascinare e rilasciare una vista sopra UITableViewCell e impostare i vincoli iniziale, finale, superiore e inferiore come 0. Imposta il vincolo di altezza come> = ExpectedMinimumSize.

In heightForRowAtIndexPath Delegatemethod:

-(CGFloat)tableView:(UITableView*)tableView heightForRowAtIndexPath:(nonnull NSIndexPath *)indexPath 
{ 
    return UITableViewAutomaticDimension; 
} 

In viewDidLoad:

self.tableView.estimatedRowHeight = 60; // required value. 
+0

Ha funzionato anche per me in swift 3: 'func tableView (_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { return UITableViewAutomaticDimension; } ' In ViewDidLoad: ' self.tableView.estimatedRowHeight = 60' – MrAn3

+0

Non riesco a farlo funzionare. La mia cella ha un'etichetta e un interruttore, entrambi centrati verticalmente rispetto alla superview, senza margini verticali. Al momento dell'esecuzione, l'altezza della cella viene riportata come '44.6667' anche se ho specificato un'altezza stimatata di' 60' (come in questa risposta). Funziona se aggiungo i margini superiore/inferiore all'etichetta o all'interruttore, ma dovrei calcolarli per dare circa 60 e sembra poco elegante ... –