月を変更するときに組み込みのカレンダーアプリと同様のスクロール動作を持つUICollectionViewを使用してカレンダーを実装しようとしています。現時点では、月の間にサイズ変更が行われるため、ビューがちらつきます。
1つのセクションに10000個のインデックスを持つUICollectionViewでUICollectionViewScrollLayoutを使用しています。セルは、インデックスの日を計算することによって埋められます。私が抱えている問題は、その月の正しい週数に合わせてビューのサイズを変更しようとすると、スクロールとビューサイズの変更が発生したときに、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);
}