All'interno di una vista supplementare (intestazione) di UICollectionView, ho un'etichetta multilinea che desidero troncare su 3 righe.Ridimensiona dinamicamente la vista supplementare di UICollectionView (contenente le UILabel multilinea)
Quando l'utente tocca un punto qualsiasi dell'intestazione vista (complementare), che cambio l'UILabel a 0 linee così tutte visualizza il testo, e crescere Altezza della vista complementare del CollectionView conseguenza (preferibilmente animata). Ecco cosa succede dopo aver toccato l'intestazione:
Ecco il mio codice finora:
// MyHeaderReusableView.m
// my gesture recognizer's action
- (IBAction)onHeaderTap:(UITapGestureRecognizer *)sender
{
self.listIntro.numberOfLines = 0;
// force -layoutSubviews to run again
[self setNeedsLayout];
[self layoutIfNeeded];
}
- (void)layoutSubviews
{
[super layoutSubviews];
self.listTitle.preferredMaxLayoutWidth = self.listTitle.frame.size.width;
self.listIntro.preferredMaxLayoutWidth = self.listIntro.frame.size.width;
[self layoutIfNeeded];
CGFloat height = [self systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;
self.frame = ({
CGRect headerFrame = self.frame;
headerFrame.size.height = height;
headerFrame;
});
NSLog(@"height: %@", @(height));
}
Quando annoto height
alla fine del layoutSubviews
, il suo valore è 149, mentre l'etichetta viene troncato e numberOfLines
è impostato su 3. Dopo aver toccato l'headerView, impostando numberOfLines
su 0 e forzando un passaggio di layout, l'altezza viene registrata come 163.5. Grande!
L'unico problema è che l'intero headerView non cresce e le celle non vengono premute.
Come è possibile modificare dinamicamente l'altezza della vista complementare della mia collezioneView (preferibilmente animata)?
Sono a conoscenza di UICollectionViewFlowLayout's headerReferenceSize
e collectionView:layout:referenceSizeForHeaderInSection:
ma non sono sicuro di come li utilizzerei in questa situazione.
Grazie uomo dopo 1 anno dopo mi hai salvato il mio tempo in Swift 3 con questo approccio. Non totalmente ma ho aggiunto un altro elemento su questa base :) +1 – tobeiosdev