Ci sono vari temi riguardanti il corretto dimensionamento un tableHeaderView con configurazione automatica (one such thread) ma tendono a pre-data IOS 8.-systemLayoutSizeFittingSize: ritorno altezza corretto per tableHeaderView sotto iOS 8
Ho una situazione con numerosi visualizzazioni di tabelle, tutte con intestazioni, con dimensioni corrette in iOS 7, ma in modo errato in iOS 8, utilizzando il codice che la maggior parte dei suddetti thread campione. Nei regolatori per le tabelle, ho il seguente metodo:
- (void)rejiggerTableHeaderView
{
self.tableView.tableHeaderView = nil;
UIView *header = self.headerView;
[header setNeedsLayout];
[header layoutIfNeeded];
CGFloat height = [header systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;
CGRect headerFrame = header.frame;
headerFrame.size.height = height;
header.frame = headerFrame;
self.tableView.tableHeaderView = header;
}
Con un'etichetta multilinea sotto iOS 7, questo dimensioni correttamente intestazione della vista tabella in questo modo:
Ma lo stesso codice eseguito sotto iOS 8 produce il seguente:
Qual è il trucco per ottenere -sys temLayoutSizeFittingSize: per restituire la dimensione corretta in iOS 8? Here's a sample project che dimostra il problema.
Sì, lo risolve. Grazie mille. Per quel che vale, iOS 8.1 ha aggiustato le cose così si è comportato come in 7.1 (lo screenshot qui sopra è 8.0.2). Ma dopo aver fatto ulteriori spunti nel mio progetto di esempio, mi sono reso conto che entrambi gli screenshot qui sopra non sono corretti. L'altezza della vista si stava impostando per racchiudere correttamente la stringa se ruotata in modalità orizzontale, quindi la tua correzione di affermare esplicitamente quale sia la larghezza reale della vista lo corregge. –
Questo non ha funzionato per me. Ho due etichette all'interno dell'intestazione, una delle quali non è ridimensionata correttamente. Sono mostrate solo tre linee. –
Ho trovato che il colpevole era un vincolo mancante: è fondamentale avere un puntone dal 'UILabel' in tutte e 4 le direzioni contro il superview. Un singolo vincolo mancante impedirà il corretto funzionamento di 'systemLayoutSizeFittingSize: UILayoutFittingCompressedSize'. – SwiftArchitect