我在CollectionView
内部有一个ScrollView
(垂直),使其可以在两个方向上滚动。
用户需要选择房间中的座位,并且房间可以有任意数量的列和行,我需要将座位排序
如果我在viewDidLayoutSubviews
的集合视图中输入width的值(例如800),它将起作用
- (void)viewDidLayoutSubviews {
self.collectionView.frame = CGRectMake(0, 0, 800, self.collectionView.frame.size.height);
self.scrollView.contentSize = self.collectionView.frame.size;
}
问题是,我在异步任务中加载了座位,如果我使用
self.collectionView.frame = CGRectMake(0, 0, 113*columns, 113*rows);
self.scrollView.contentSize = self.collectionView.frame.size;
加载座位后,它不起作用。
我无法将尺寸放入
viewDidLayoutSubviews
,因为我仍然不知道有多少个座位!加载数据后如何处理?
最佳答案
您可以在接收到数据后调用setNeedsLayout
或layoutIfNeeded。这将要求视图更新子视图的布局,从而触发对viewDidLayoutSubviews
的调用。
请注意,您需要更新viewDidLayoutSubviews
方法,以考虑columns
和rows
的新值。
两者之间的区别在于layoutIfNeeded
具有立竿见影的效果,而setNeedsLayout
将在下一个更新周期触发重新布局。从性能角度考虑,最好使用setNeedsLayout
,它还会合并多个布局失效,但是,根据是否有动画,layoutIfNeeded
可能更可取。
关于ios - 更改UICollectionView的大小,而无需使用viewDidLayoutSubviews,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34764176/