CollectiovView在导航控制器逼人退
问题描述:
我有以下的CollectionView布局(红色)前后发生了改变布局CollectiovView在导航控制器逼人退
如果我按到下一个控制器,然后按返回键,它看起来像这样
如何避免这种情况发生呢?我的代码如下
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)
}
答
我可能在这里错了(并且复制这个场景我自己需要一些时间),所以我会给它一个镜头。我认为无论是lineSpacing
和sectionInset
布局过程中考虑到......你能试着从itemSize
减去minimumLineSpacing
?
尝试是这样的:
layout.itemSize = CGSize(width: ((screenWidth - layout.minimumLineSpacing)/2), height: screenWidth/2)
而且,显然设置minimumLineSpacing
你这样做计算之前,否则你会用不同的值工作。
正如mattsven在评论中指出的那样,我也认为你应该在viewDidLayoutSubviews
中这样做。
还有一点:我劝你不要使用屏幕的尺寸,但潜在的视图控制器的视图的维度。 因此,这些都是你要使用的尺寸:
取而代之的是:
屏幕尺寸= UIScreen.mainScreen()范围
屏幕宽度= screenSize.width
screenHeight = screenSize.height
我会用这个:
viewSize = self.view.frame.size
viewWidth = viewSize.width
viewHeight = viewSize.height
你执行在'viewDidLoad'布局的大小和位置的计算。视图加载完成后不调用'viewDidLoad'。您是否曾尝试在'viewWillAppear'中运行该代码。 – Gordonium
放置它的更好的地方是'viewDidLayoutSubviews',每当superview' self.view'改变边界时调用'viewDidLayoutSubviews'。 – mattsven
既不viewWillAppear,也不viewDidLayoutSubviews没有帮助 –