自动布局未正确处理 iPhone X 缺口
Auto Layout not properly handling iPhone X notch
我已经使用 swift 在我的应用程序顶部实现了一个 pageViewIndicator。我一直在我个人的 iPhone 上测试它,效果很好,但是当使用 iPhone X 模拟器时,我注意到它消失在凹口后面,只是因为我没有提到将它放在里面安全区或安全区尚未正确配置。这是比较:
这似乎是一个简单的问题,但我目前还没有找到任何关于如何处理这个问题的适当支持:主要建议是调整 safeAreaInsets,但我不明白如何将其应用于 AutoLayout
功能。我已经尝试向 pageController 添加 topAnchor 约束,但是否可以使用基本算法对其进行编辑?
pageControl.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true
不需要"adjust"任何东西。安全区的整个点是它的顶部在非XiPhones上低于状态栏,在[=28=上低于"notch" ] X.安全区就是这样for.
因此,只需将页面控件的顶部固定到安全区域的顶部即可。这是它在 iPhone 5s 模拟器上的样子:
这是它在 iPhone X 模拟器上的样子:
我发现了我的问题,这实际上是我刚刚监督的问题:我忘了添加
pageControl.translatesAutoresizingMaskIntoConstraints = false
添加到 pageControl,然后再将其添加为子视图。有了这个,我能够分配以下约束以将我的 pageController 正确定位在我想要的位置:
let safeViewMargins = self.view.safeAreaLayoutGuide
pageControl.topAnchor.constraint(equalTo: safeViewMargins.topAnchor).isActive = true
pageControl.leadingAnchor.constraint(equalTo: safeViewMargins.leadingAnchor).isActive = true
pageControl.trailingAnchor.constraint(equalTo: safeViewMargins.trailingAnchor).isActive = true
这在所有设备上都完美 运行。
我在当前正在升级的应用程序中遇到了同样的问题。它在主屏幕的右侧有一列按钮。在右侧凹口的横向方向上,按钮被部分切掉。如果不需要,我不想移动按钮,因为这会显着减小消息区域左侧的尺寸,尤其是在纵向模式下。
我没有看到 Xcode 中对应一个 "safe area" 的约束并且不想进入动态定位的兔子洞,所以我的解决方案是限制方向到纵向和横向右(这意味着左边的凹口)。
如果我们有 per-device-type 方向限制就好了,但我不会为此屏住呼吸。
希望几年后,这种丑陋的刘海屏风潮消失。
我已经使用 swift 在我的应用程序顶部实现了一个 pageViewIndicator。我一直在我个人的 iPhone 上测试它,效果很好,但是当使用 iPhone X 模拟器时,我注意到它消失在凹口后面,只是因为我没有提到将它放在里面安全区或安全区尚未正确配置。这是比较:
这似乎是一个简单的问题,但我目前还没有找到任何关于如何处理这个问题的适当支持:主要建议是调整 safeAreaInsets,但我不明白如何将其应用于 AutoLayout
功能。我已经尝试向 pageController 添加 topAnchor 约束,但是否可以使用基本算法对其进行编辑?
pageControl.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true
不需要"adjust"任何东西。安全区的整个点是它的顶部在非XiPhones上低于状态栏,在[=28=上低于"notch" ] X.安全区就是这样for.
因此,只需将页面控件的顶部固定到安全区域的顶部即可。这是它在 iPhone 5s 模拟器上的样子:
这是它在 iPhone X 模拟器上的样子:
我发现了我的问题,这实际上是我刚刚监督的问题:我忘了添加
pageControl.translatesAutoresizingMaskIntoConstraints = false
添加到 pageControl,然后再将其添加为子视图。有了这个,我能够分配以下约束以将我的 pageController 正确定位在我想要的位置:
let safeViewMargins = self.view.safeAreaLayoutGuide
pageControl.topAnchor.constraint(equalTo: safeViewMargins.topAnchor).isActive = true
pageControl.leadingAnchor.constraint(equalTo: safeViewMargins.leadingAnchor).isActive = true
pageControl.trailingAnchor.constraint(equalTo: safeViewMargins.trailingAnchor).isActive = true
这在所有设备上都完美 运行。
我在当前正在升级的应用程序中遇到了同样的问题。它在主屏幕的右侧有一列按钮。在右侧凹口的横向方向上,按钮被部分切掉。如果不需要,我不想移动按钮,因为这会显着减小消息区域左侧的尺寸,尤其是在纵向模式下。
我没有看到 Xcode 中对应一个 "safe area" 的约束并且不想进入动态定位的兔子洞,所以我的解决方案是限制方向到纵向和横向右(这意味着左边的凹口)。
如果我们有 per-device-type 方向限制就好了,但我不会为此屏住呼吸。
希望几年后,这种丑陋的刘海屏风潮消失。