我正在尝试使用UICollectionView实现一个日历,它在更改月份时具有类似于内置日历应用程序的滚动行为。目前,视图正在闪烁,因为调整大小发生在两个月之间。
我使用的是一个在1节中有10000个索引的UICollectionView的UICollectionViewScrollLayout。通过计算索引的日期来填充单元格。我遇到的问题是,当尝试调整视图大小以适应该月的正确周数时,随着滚动和视图大小的变化,集合视图似乎不能足够快地在单元格中绘制。在放慢了动画的速度后,随着视图大小的改变,似乎过早地从视图中删除了单元。缩小和放大视图时都会发生这种情况。也就是说,当他们要滚动离开视图时,他们会在滚动出视图之前被删除。
布局都是使用自动布局完成的,上面有一个固定的视图,下面有一个可调整大小的视图。当集合视图的大小改变时,下面的视图也会改变以填充空间。我似乎设法实现此行为的唯一方法是按照下面的代码更改内部大小。我试过更改框架/边界,但似乎不适用于自动布局。我以正确的方式调整视图的大小吗?
我是否应该将行为移动到视图控制器,并更改固定高度的约束。
// Scroll the view to the date given.
-(void) moveViewToDate:(NSDate*) date
{
NSIndexPath *indexPath=[self indexPathForFirstDayInMonth:date];
[self scrollToItemAtIndexPath:indexPath atScrollPosition:UICollectionViewScrollPositionTop animated:YES];
[UIView animateWithDuration:0.25f animations:^{
self.isize=[self weeksInViewForDate:date];
[self invalidateIntrinsicContentSize];
[self.superview layoutIfNeeded];
}];
}
-(CGSize)intrinsicContentSize
{
return CGSizeMake(322,self.isize*46);
}发布于 2012-11-20 05:08:13
我终于弄清楚是怎么回事了。由于我提交了一个改变视图大小的动画并进行滚动,因此两个分离的动画相互冲突。
我最终使用UIScrollView重写了这个集合,但也遇到了同样的问题。我通过将UIScrollView放在UIView中来绕过它。使用对动画高度的约束来调整UIView的大小。
https://stackoverflow.com/questions/13383592
复制相似问题