2

我正在尝试使用 UICollectionView 实现一个日历,它在更改月份时具有与内置日历应用程序类似的滚动行为。目前,随着月份之间发生调整大小,视图正在闪烁。

我正在使用 UICollectionViewScrollLayout 和 UICollectionView,在 1 部分中有 10000 个索引。通过计算索引的日期来填充单元格。我遇到的问题是,当尝试调整视图大小以适合该月的正确周数时,随着滚动和视图大小的变化,collectionview 似乎没有足够快地在单元格中绘制。放慢动画速度后,随着视图大小的变化,似乎单元格被过早地从视图中删除了。缩小和放大视图都会发生这种情况。即,当它们即将滚动出视图时,它们会在滚动出视图之前被移除。

布局全部使用自动布局完成,上面有一个固定视图,下面有一个可调整大小的视图。随着集合视图大小的变化,下面的视图会发生变化以填充空间。我似乎设法实现这种行为的唯一方法是根据下面的代码更改内在大小。我尝试更改框架/边界,但它似乎不适用于自动布局。我是否正在以正确的方式调整视图的大小?

我是否应该将行为移动到视图控制器并更改固定高度的约束。

// 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);   
}
4

1 回答 1

0

我终于弄清楚发生了什么。由于我正在提交一个改变视图大小并进行滚动的动画,因此这两个单独的动画相互冲突。

我最终使用 UIScrollView 重写了集合,但遇到了同样的问题。我通过将 UIScrollView 放在 UIView 中来解决它。UIView 使用对动画高度的约束来调整大小。

于 2012-11-19T21:08:13.060 回答