2

月を変更するときに組み込みのカレンダーアプリと同様のスクロール動作を持つ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);   
}
4

1 に答える 1

0

私はついに何が起こっているのかを理解しました。ビューのサイズを変更してスクロールするアニメーションをコミットしていたので、2つの別々のアニメーションが互いに競合しています。

最終的にUIScrollViewを使用してコレクションを書き直しましたが、同じ問題が発生しました。UIScrollViewをUIViewに配置することで問題を解決しました。UIViewは、アニメーション化された高さの制約を使用してサイズ変更されました。

于 2012-11-19T21:08:13.060 に答える