在运行时设置 UICollectionView 框架

Setting UICollectionView frame at runtime

我正在尝试在运行时设置 UICollectionView 的框架。

我尝试使用

mainCollectionView.frame = CGRect(x: 20, y: 20, width: self.view.frame.width-20, height: self.view.frame.width-20)

在我的 viewDidLoad 中,但不幸的是,它将始终保持在 IB 中。 我还没有使用 constraints.

否则调整我的单元格大小在 cellForItem:

中有效
 collectionCell.frame.size.width = self.view.frame.width/8 * 3

你写错了高度,因为你把宽度设置成了高度。

试试不带导航栏的这一行:

 mainCollectionView.frame = CGRect(x: 20, y: 20, width: UIScreen.mainScreen().bounds.size.width - (20 * 2), height: UIScreen.mainScreen().bounds.size.height - (20 * 2))

尝试在viewDidLayoutSubviews

中设置框架

运行 LayoutSubviews 覆盖之一中的以下内容。这将告诉集合视图更新其框架。

   override func viewWillLayoutSubviews() {
        super.viewWillLayoutSubviews()
        mainCollectionView.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height)
        mainCollectionView.collectionViewLayout.invalidateLayout()
    }