屏幕底部的按钮:iPhone X vs 常规屏幕

Button on bottom of screen: iPhone X vs regular screen

我正在尝试针对 iPhone X 屏幕优化应用程序。目前它在大多数屏幕上显示黑条或白条。作为示例,我将使用 PaymentMethodsView.

PaymentMethodsView 是一个自定义 UIView,在水平 StackView 中包含 1 或 2 个按钮,superView 具有灰色背景。这个 StackView 当前被限制为 16px 到超级视图(所有 4 个边)。目前它在 iPhone X 上看起来像这样(在常规 iPhones 上,视图就在屏幕底部:

我在这里想要实现的是灰色区域延伸到屏幕底部,而黄色区域位于整个视图底部的位置。 (因此降低了 16 像素)

我可以通过为这个 ViewController 启用 Use Safe Area Layout Guide,将 viewController 中的 PaymentMethodsView 约束到侧面的 0 to safe area 来实现它, 0 to superview 在底部。然后在 PaymentMethodsView 本身中,我将所有 StackView 的约束更改为 safe area 而不是 superview,并将底部约束更改为 0 而不是 16。 这工作正常,除了常规 iPhones 底部的 16px(在 StackView 下)消失并将黄色按钮放在屏幕底部。

我该如何解决这个问题?

谢谢!

您可以通过向堆栈视图添加两个底部约束来做到这一点...

首先,将 grayView Bottom at Zero 约束到视图(它的父视图)的底部,而不是到safe-area.那么

  • >= 16
  • 从 stackView Bottom 添加一个约束到 grayView(它的父视图)的底部
  • 以及从 stackView 底部到 safe-area 的 底部的第二个约束 0 Priority: 999

This says: 保持 stackView 的底部 至少 距离它的父视图底部(灰色视图)至少 16 点

999 说把它放在 safe-area 底部的 Zero-pts if possible

iPhone 7 的结果:

和 iPhone XS

下面的代码对我有用,试一试,

  1. 点击你查看控制器

  2. Select Identify and Type 来自右侧面板

  3. Interface Builder Document 下启用 Use Safe Area Layout

现在无论你想把任何视图放在底部,只要给出与视图不安全区域相对应的约束