【问题标题】:UICollectionView scroll to bottom do not reveal the entire itemUICollectionView 滚动到底部不显示整个项目
【发布时间】:2014-05-19 09:08:04
【问题描述】:

我有一个这样的屏幕,它内置在界面生成器中:

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

UICollectionView 框架高度 = 527.000000

视图帧 = 504.000000

所以UICollectionView's 的高度大于视图的高度。我希望集合视图适合 3.5" 屏幕和 4" 屏幕。

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

【问题讨论】:

  • viewDidAppear方法中,打印出视图控制器的view和UICollectionView的frame。我猜 UICollectionView 会延伸到屏幕底部。

标签: ios uicollectionview


【解决方案1】:

这是因为您的集合视图的高度超过了框架的高度,请尝试降低适合您的 UIView 高度的集合视图的高度 - 您的集合视图的 yOrigin。

【讨论】:

  • 我的collectionview的底部与UIViewController的view一致。如果我降低 collectionview 的高度,它将在底部显示一个空白区域。
  • 根据您的编辑,您的收藏视图的高度大于视图的高度。尝试降低collection view的高度一次..
  • 我告诉过你我以前试过。该应用程序已经上线几个月了,但它只能在 3.5 英寸屏幕上正常运行。我刚刚发现在 4 英寸屏幕底部有很大的空白空间,这就是为什么我需要寻找更好的方法来解决这个问题.
  • 这个你可以根据屏幕高度降低高度,即如果是480,则降低高度,否则不降低。如果您不想这样做,那么您将不得不进行约束设置..
  • 我不想这样做,因为它不适合所有屏幕。我最终使 collectionview 全屏显示,以便自动布局约束不会出现意外行为。例如,当我设置 UICollectionview 的顶部空间时,它与左上角的 UIButton 相关,这不是我想要的。我希望 UICollectionView 在屏幕顶部有固定空间。
【解决方案2】:

问题是当添加导航栏时,UICollectionView 被“下推”,但它的高度保持不变。

您需要添加一个布局约束,该约束将导致 UICollectionView 在添加导航栏时降低高度。约束应该类似于“底部空间到底部布局指南 = 0”

【讨论】:

  • 这是我添加约束后发生的情况:如果我只将约束添加到底部,我将能够在向下滚动时看到整个项目。但随后分段控件和 UIButton 将被 UINavigationBar 覆盖。但是如果我在顶部也加了约束,(top space to top = 0),向下滚动时我将无法看到底部的项目,那么这将与设置无约束的效果相同。
【解决方案3】:

斯威夫特 4.1

尝试定义如下约束以考虑导航栏(即使在自动旋转的情况下,当状态栏可以改变高度时,它也应该工作)它还考虑了 iOS 11 中的安全区域。

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

【讨论】:

    猜你喜欢
    • 2023-03-20
    • 2021-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多