W widoku dodatkowym UICollectionView (nagłówek) mam etykietę wielowierszową, którą chcę obcinać do 3 linii.Dynamiczna zmiana rozmiaru dodatkowego widoku UICollectionView (zawierającego multilinię UILabel)
Gdy użytkownik kliknie w dowolnym miejscu na nagłówku (uzupełniającym) zdaniem, chcę przełączyć UILabel do 0 linie tak, wszystkie wyświetlacze tekstowe i odpowiednio rośnie wysokość uzupełniające widoku danych, w CollectionView za (najlepiej animowane). Oto, co dzieje się po dotknięciu nagłówka:
Oto mój kod do tej pory:
// 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));
}
Kiedy loguję height
na koniec layoutSubviews
, jego wartość to 149, natomiast etykieta jest obcięty i numberOfLines
jest ustawiona na 3. Po dotknięciu nagłówkaView, ustawienie numberOfLines
na 0 i wymuszenie przejścia układu, wysokość zostanie zapisana jako 163,5. Wspaniały!
Jedynym problemem jest to, że cały headerView nie rośnie, a komórki nie są zmniejszane.
Jak mogę dynamicznie zmieniać wysokość mojego dodatkowego widoku kolekcji (najlepiej animowanego)?
Jestem świadomy UICollectionViewFlowLayout za headerReferenceSize
i collectionView:layout:referenceSizeForHeaderInSection:
, ale nie jestem pewien, jak bym ich użył w tej sytuacji.
Dzięki stary po 1 lata później zaoszczędziłeś mój czas w Swift 3 dzięki temu podejściu. Nie całkowicie, ale dodałem jeszcze inne rzeczy na tej bazie :) +1 – tobeiosdev