按下导航控制器后,CollectiovView会更改布局

时间:2016-02-27 20:24:42

标签: ios uicollectionview

我有以下collectionView布局(红色)

enter image description here

如果我按下转到下一个控制器,然后按回按钮,它看起来像这样

enter image description here

如何防止这种情况发生?我的代码正在关注

override func viewDidLoad() {
    super.viewDidLoad()

    screenSize = UIScreen.mainScreen().bounds
    screenWidth = screenSize.width
    screenHeight = screenSize.height

    collectionView.backgroundColor = UIColor.whiteColor()
    tableViewHeightConstant.constant = 5*44
    collectionViewHeightConstant.constant = screenSize.width / 2 * 2 // for testing purposes

    let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
    layout.sectionInset = UIEdgeInsets(top: 20, left: 0, bottom: 10, right: 0)
    layout.itemSize = CGSize(width: screenWidth / 2, height: screenWidth / 2)
    layout.minimumInteritemSpacing = 0
    layout.minimumLineSpacing = 5
    collectionView.setCollectionViewLayout(layout, animated: true)
}

1 个答案:

答案 0 :(得分:0)

我可能在这里错了(并且我自己需要一些时间再现这个场景),所以我会给它一个机会。我认为在布局期间会考虑lineSpacingsectionInset ...您是否可以尝试从minimumLineSpacing中减去itemSize

尝试这样的事情:

layout.itemSize = CGSize(width: ((screenWidth - layout.minimumLineSpacing) / 2), height: screenWidth / 2)

另外,显然在进行此计算之前设置minimumLineSpacing,否则您将使用不同的值。

正如mattsven在评论中指出的那样,我也认为你应该在viewDidLayoutSubviews中这样做。

另一点:我建议你不要使用屏幕的尺寸,而是使用底层视图控制器视图的尺寸。 所以这些是你想要合作的尺寸:

而不是:

  

screenSize = UIScreen.mainScreen()。bounds

     

screenWidth = screenSize.width

     

screenHeight = screenSize.height

我会用这个:

viewSize = self.view.frame.size
viewWidth = viewSize.width
viewHeight = viewSize.height