【问题标题】:Shrink Collection View when Navigation Bar added添加导航栏时缩小集合视图
【发布时间】:2017-10-10 15:53:43
【问题描述】:

在我的 iOS swift 应用程序中,我使用自定义 UICollectionViewLayout 创建了 UIColletctionViewController,它创建了水平滚动的父子网格布局。计算此布局的高度,使其适合我的屏幕高度。

override var collectionViewContentSize: CGSize {
    return CGSize(
        width: someWidth,
        height: collectionView?.frame.height ?? 0
    )
}

当我将收藏视图控制器嵌入导航栏中时,整个收藏视图会向下移动,但 collectionView?.frame.height 保持不变,因此我的内容会向下溢出。

如何在没有导航栏的情况下获得这个减少的可用空间的高度?

【问题讨论】:

  • 尝试在视图框架改变时使 CollectionView 布局无效。
  • 不幸的是,这没有帮助。

标签: ios swift uicollectionview uinavigationbar


【解决方案1】:

如果您的视图控制器将edgesForExtendedLayout 设置为.all.topautomaticallyAdjustsScrollViewInsets = true(看起来就是这种情况),那么您的collectionView 的contentInset 将被调整以补偿导航栏的高度,因此请检查那个插图。

假设您的 collectionView 延伸到顶部(从导航栏后面开始)获得可见高度:

let visibleHeight = collectionView.frame.height - collectionView.contentInset.top

你可以这样做:

override var collectionViewContentSize: CGSize {
    return CGSize(
        width: someWidth,
        height: collectionView.frame.height - collectionView.contentInset.top
    )
}

另一个选项是设置edgesForExtendedLayout = UIRectEdge(rawValue: UInt(0)),然后您的视图控制器的视图将不会延伸到任一边缘,而是起源于导航栏下方,因此您的集合视图的框架将在可见范围内,您可以使用 collectionViewContentSize 之类的它在你的例子中。

【讨论】:

  • 我的collectionView.contentInset.top 设置为零,因此不起作用。但是设置edgesForExtendedLayout = UIRectEdge(rawValue: UInt(0)) 的第二个解决方案有效。谢谢!
  • 太棒了。然后你可以检查它作为回答:)
  • @Peracek btw,对于其他解决方案,请检查 viewWillAppearviewWillLayoutSubviews 中的 collectionView.contentInset.top,因为 viewDidLoad 中的插图尚未调整。
【解决方案2】:

我实际上找到了非常适合我的简单解决方案。我在我的集​​合视图控制器的属性检查器中取消选中“在顶部栏下”选项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-23
    • 1970-01-01
    • 1970-01-01
    • 2014-05-19
    • 2021-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多