我在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,因为我仍然不知道有多少个座位!

加载数据后如何处理?

最佳答案

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

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

两者之间的区别在于layoutIfNeeded具有立竿见影的效果,而setNeedsLayout将在下一个更新周期触发重新布局。从性能角度考虑,最好使用setNeedsLayout,它还会合并多个布局失效,但是,根据是否有动画,layoutIfNeeded可能更可取。

关于ios - 更改UICollectionView的大小,而无需使用viewDidLayoutSubviews,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34764176/

10-11 15:15