我有一个像这样的屏幕,它是在界面构建器中构建的:
底部的控件是UICollectionView
,另外两个是UIButton和segmentedControl。他们坐在UIView上,这是UIController's
视图的孩子,但具有相同的框架。在我的代码中,我将UIViewController
添加到UINavigationController
,因此屏幕顶部会显示UINavigationBar
。我可以设置自动布局约束以强制此屏幕的顶部移动到导航栏下方。但是,当我向下滚动UICollectionView
时,我无法滚动到底部以查看其余项目。我只能看到最后两个项目的一半大小。
我更新了代码并在viewDidAppear
中添加了一些日志:
UICollectionView框架高度= 527.000000
查看框架= 504.000000
因此UICollectionView's
高度大于视图的高度。我希望集合视图适合3.5英寸屏幕和4英寸屏幕。
知道我做错了什么吗?我该如何解决这个问题?
答案 0 :(得分:0)
这是因为你的集合视图的高度超过了框架的高度,尝试降低集合视图的高度,使其符合UIView的高度 - 集合视图的yOrigin。
答案 1 :(得分:0)
问题是,当添加导航栏时,UICollectionView会被“推”下来但其高度保持不变。
您需要添加布局约束,这将导致UICollectionView在添加导航栏时降低高度。约束应该是“底部空间到底部布局指南= 0”
答案 2 :(得分:0)
Swift 4.1
尝试定义以下约束条件以考虑导航栏(状态栏可以更改高度时,即使在自动旋转的情况下也可以使用),还考虑了iOS 11中的safeArea。
let collectionView = UICollectionView()
self.view.addSubview(collectionView)
if #available(iOS 11.0, *) {
let safeArea = self.view.safeAreaLayoutGuide
collectionView.topAnchor.constraint(equalTo: safeArea.topAnchor, constant: 0).isActive = true
} else {
let topGuide = self.topLayoutGuide
collectionView.topAnchor.constraint(equalTo: topGuide.bottomAnchor, constant: 0).isActive = true
}
collectionView.leftAnchor.constraint(equalTo: self.view.leftAnchor, constant: 0).isActive = true
collectionView.rightAnchor.constraint(equalTo: self.view.rightAnchor, constant: 0).isActive = true
collectionView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor, constant: 0).isActive = true