在没有viewDidLayoutSubviews的情况下更改UICollectionView大小

时间:2016-01-13 10:26:27

标签: ios objective-c uiscrollview uicollectionview

我在CollectionView内部有一个ScrollView(垂直),可以在两个方向上滚动。

用户需要选择房间内的座位,房间可以有任意数量的列和行,我需要按顺序排列座位

如果我在viewDidLayoutSubviews的集合视图中放置了一个宽度值(例如800),那么它可以正常工作

- (void)viewDidLayoutSubviews {
self.collectionView.frame = CGRectMake(0, 0, 800, self.collectionView.frame.size.height);
self.scrollView.contentSize = self.collectionView.frame.size;

}

问题是,我在Async任务中加载了座位,如果我使用

self.collectionView.frame = CGRectMake(0, 0, 113*columns, 113*rows);
self.scrollView.contentSize = self.collectionView.frame.size;

加载座椅后它不起作用。

我无法将大小放在viewDidLayoutSubviews中,因为我还不知道有多少席位!

加载数据后我怎么做?

1 个答案:

答案 0 :(得分:1)

收到数据后,您可以致电setNeedsLayoutlayoutIfNeeded。这将要求视图更新更新子视图的布局,这将触发对viewDidLayoutSubviews的调用。

请注意,您需要更新viewDidLayoutSubviews方法,以考虑columnsrows的新值。

两者之间的区别在于layoutIfNeeded立即生效,而setNeedsLayout将在下一个更新周期中触发重新布局。性能方面setNeedsLayout是首选,它也可以合并多个布局失效,但是,如果您有动画,则可能更优选layoutIfNeeded