UICollectionView滚动到底部不会显示整个项目

时间:2014-05-19 09:08:05

标签: ios uicollectionview

我有一个像这样的屏幕,它是在界面构建器中构建的:

enter image description here

底部的控件是UICollectionView,另外两个是UIButton和segmentedControl。他们坐在UIView上,这是UIController's视图的孩子,但具有相同的框架。在我的代码中,我将UIViewController添加到UINavigationController,因此屏幕顶部会显示UINavigationBar。我可以设置自动布局约束以强制此屏幕的顶部移动到导航栏下方。但是,当我向下滚动UICollectionView时,我无法滚动到底部以查看其余项目。我只能看到最后两个项目的一半大小。 我更新了代码并在viewDidAppear中添加了一些日志:

  

UICollectionView框架高度= 527.000000

     

查看框架= 504.000000

因此UICollectionView's高度大于视图的高度。我希望集合视图适合3.5英寸屏幕和4英寸屏幕。

知道我做错了什么吗?我该如何解决这个问题?

3 个答案:

答案 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