我在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
中,因为我还不知道有多少席位!
加载数据后我怎么做?
答案 0 :(得分:1)
收到数据后,您可以致电setNeedsLayout
或layoutIfNeeded。这将要求视图更新更新子视图的布局,这将触发对viewDidLayoutSubviews
的调用。
请注意,您需要更新viewDidLayoutSubviews
方法,以考虑columns
和rows
的新值。
两者之间的区别在于layoutIfNeeded
立即生效,而setNeedsLayout
将在下一个更新周期中触发重新布局。性能方面setNeedsLayout
是首选,它也可以合并多个布局失效,但是,如果您有动画,则可能更优选layoutIfNeeded
。