“从iOS中排除导航栏”;“安全区”;
在我的iOS应用程序中,我在导航栏下呈现视图。这是因为导航栏在用户点击屏幕之前是隐藏的 下面的截图说明了我的问题 “X”按钮呈现在iPhone X的凹口下方,几乎看不见。这就是我将按钮的“从iOS中排除导航栏”;“安全区”;,ios,autolayout,ios-autolayout,iphone-x,Ios,Autolayout,Ios Autolayout,Iphone X,在我的iOS应用程序中,我在导航栏下呈现视图。这是因为导航栏在用户点击屏幕之前是隐藏的 下面的截图说明了我的问题 “X”按钮呈现在iPhone X的凹口下方,几乎看不见。这就是我将按钮的topAnchor约束到它的superview!。topAnchor 请注意,除iPhone X外,所有设备都可以使用此功能 此屏幕截图中的“X”按钮定位到其superview!。safeAreaLayoutGuide.topAnchor并在导航栏下方呈现。考虑到苹果公司在《安全区域布局指南》上的文档,这是有道
topAnchor
约束到它的superview!。topAnchor
请注意,除iPhone X外,所有设备都可以使用此功能
此屏幕截图中的“X”按钮定位到其superview!。safeAreaLayoutGuide.topAnchor
并在导航栏下方呈现。考虑到苹果公司在《安全区域布局指南》上的文档,这是有道理的:
本指南反映了导航栏、选项卡栏、工具栏和其他上级视图未涵盖的视图部分
但是,我希望“X”按钮呈现在iPhone X的凹口下方和导航栏下方。以下是隐藏导航栏时的外观:
“X”按钮应呈现在槽口正下方
所以我的问题是:
是否有办法将导航栏从视图的安全区域布局指南中排除?如果没有,除了手动偏移iPhone X上的按钮,我还有什么选择。
请注意,我正在以编程方式完成所有工作。我不再使用故事板
谢谢 这不是答案,而是解决办法:
layoutSubviews()
中,根据“X”的超级视图和窗口safeAreaInsets
更新顶部约束的常数可以通过添加其他插图来更改视图控制器安全区域插图。 创建一个
UIEdgeInsetsMake()
对象,从顶部插图中减去导航栏高度。然后将其添加到视图控制器附加安全区域插图
声明:var additionalSafeAreaInsets:UIEdgeInsets{get set}
override func layoutSubviews() {
// To support devices with a "safe area". If the receiver has a top safe area, position
// the close button beneath the _window's_ safe area.
// Note that using the receiver's safe area does not work in this case because it includes
// the navigation bar. We want to render the close button beneath the navigation bar.
let windowSafeAreaInsets = UIApplication.shared.keyWindow!.safeAreaInsets
// Only use the safe area if the receiver _and_ window have a top safe area. This handles
// the case of non-safe area devices using a hidden navigation bar.
closeButtonTopConstraint.constant = safeAreaInsets.top > 0 && windowSafeAreaInsets != .zero
? windowSafeAreaInsets.top : 16
// Possibly do something similar for landscape and the "X" button's trailing constraint.
}