我有以下collectionView布局(红色)
如果我按下转到下一个控制器,然后按回按钮,它看起来像这样
如何防止这种情况发生?我的代码正在关注
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)
}
答案 0 :(得分:0)
我可能在这里错了(并且我自己需要一些时间再现这个场景),所以我会给它一个机会。我认为在布局期间会考虑lineSpacing
和sectionInset
...您是否可以尝试从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