Имам UICollectionView
, което е subview
от UIScrollView
(това се изисква поради неща над и под изгледа на колекцията.
Така или иначе...
Изгледът на колекцията показва три елемента на ред и само два реда за начало.
Първите пет артикула са действителни артикули, а последният е артикул „Вижте повече“.
Когато се натисне последният елемент, променям броя на показаните елементи и актуализирам изгледа на колекцията...
NSMutableArray *indexPaths = [NSMutableArray array];
for (int i = 5 ; i<self.facilities.count ; i++) {
[indexPaths addObject:[NSIndexPath indexPathForItem:i inSection:0]];
}
// changing the tableCollapsed bool updates the number of items
if (self.isTableCollapsed) {
self.tableCollapsed = NO;
[self.collectionView insertItemsAtIndexPaths:indexPaths];
} else {
self.tableCollapsed = YES;
[self.collectionView deleteItemsAtIndexPaths:indexPaths];
}
Тогава бягам...
[self setHeightAnimated:YES];
Което прави това...
- (void)setHeightAnimated:(BOOL)animated
{
NSInteger numberOfRows = (NSInteger) ceilf((CGFloat)[self getNumberOfItems] / self.numberOfItemsPerRow);
self.heightConstraint.constant = numberOfRows * self.rowHeight;
if (animated) {
[UIView animateWithDuration:0.2
animations:^{
[self layoutIfNeeded];
}];
} else {
[self layoutIfNeeded];
}
}
Това винаги работи и задава правилната височина и получава правилната стойност на animated
, когато трябва да бъде YES
или NO
. Въпреки това никога не анимира. Просто превключва веднага на новата височина.
Предполагам, че това се дължи на някакъв код за оформление, който се изпълнява или нещо подобно, но се чудех дали някой знае как най-добре да направя това, така че височината да се променя правилно с анимацията, която съм посочил.
Благодаря