【问题标题】:Swift: safe area on iPhoneSwift:iPhone 上的安全区域
【发布时间】:2018-07-05 06:47:47
【问题描述】:

我有 ViewControllercollectionViewcollectionView 底部、顶部、前导、尾随约束到超级视图。在 iPhone 8 上,我的屏幕如下所示:

对于其他设备,一切看起来都很好。但在 iPhone X 上看起来像这样:

我将此代码用于我的单元格:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

    let offset: CGFloat = 10
    let width = collectionView.bounds.width / 3  - offset * 4
    let a: CGFloat = width / 2
    let b: CGFloat = a * 3 + a * 0.65
    let height = b

    return CGSize(width: width, height: height) 

    }

如何解决?

更新

约束:

【问题讨论】:

  • 黑屏是什么?
  • 删除你的collectionview的顶部,底部,前导和尾部约束,并从安全区域添加顶部,底部,前导和尾部约束它肯定会工作。
  • @dahiya_boy 3 个黑色矩形是 collectionView 单元格
  • @Y_Y 我需要使用collection-view 的前导和尾随约束,如果我向左或向右滚动,我的内容应该从屏幕的左边缘或右边缘显示。或者,如果我使用安全区域,我的内容会从安全区域显示。
  • 安全区域在iphone x的情况下是可见的,否则与superview相同。因此,在您的情况下,通过添加尾随和前导约束不会产生任何问题,因为安全区域会影响您的 collectionview 的顶部和底部。

标签: ios swift uiviewcontroller iphone-x


【解决方案1】:

根据您的详细信息,我得到了以下输出。

注意:在横向模式下,顶部的安全区域为零。

约束:

SizeForItem:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        let offset: CGFloat = 10
        let width = collectionView.bounds.width / 3  - offset * 4
        let a: CGFloat = width / 2
        let b: CGFloat = a * 3 + a * 0.65
        let height = b

        return CGSize(width: width, height: height)
    }

编辑:检查此 o/p 是否适合您。所以我会解释。如果你想覆盖安全区域,那是不可能的。

iPhone X

iPhone 8

【讨论】:

  • 我有同样的结果。但我需要在顶部约束上留出空间,就像在 iPhone 8 上一样。我的 contentView 应该对 superview 有前导和尾随约束。
  • @111 因为你必须从safe.area 提供恒定的空间。
  • 我认为@apetrov 是对的。请检查有问题的 cmets。你怎么看?
  • @111 单元格大小是用collectionView 大小计算的。由于您已将顶部空间设为零,因此它会粘在顶部。给定空间并检查。
  • 在每个设备上这个空间是不同的。如果我给定空间,我的细胞比例就会被打破。
猜你喜欢
  • 2020-06-13
  • 1970-01-01
  • 2011-06-29
  • 2017-11-13
  • 1970-01-01
  • 2015-12-08
  • 2019-01-20
  • 1970-01-01
  • 2021-01-05
相关资源
最近更新 更多