UIStackView 在使用 UINavigationController 时无法设置底部约束



我有UIView,其中UIStackView是一个子视图。通常它会填充UIView。但是,当我在UINavigationController中嵌入UIView时,UIView和UIStackView不再延伸到屏幕底部。它们的高度似乎只需要包含UIStackView的子视图,而不需要其他内容。以下是约束代码的样子:

func setContraints() {
readableContentGuide.topAnchor.constraint(equalTo: stackView.topAnchor, constant: 0.0).isActive = true
readableContentGuide.bottomAnchor.constraint(equalTo: stackView.bottomAnchor, constant: 0.0).isActive = true
readableContentGuide.leadingAnchor.constraint(equalTo: stackView.leadingAnchor, constant: 0.0).isActive = true
readableContentGuide.trailingAnchor.constraint(equalTo: stackView.trailingAnchor, constant: 0.0).isActive = true
stackView.topAnchor.constraint(equalTo: safeAreaLayoutGuide.topAnchor)
stackView.bottomAnchor.constraint(equalTo: safeAreaLayoutGuide.bottomAnchor)
}

上面的这条线没有影响:

stackView.bottomAnchor.constraint(equalTo: safeAreaLayoutGuide.bottomAnchor)

以下是我如何在AppDelegate:中设置UINavigationController

window = UIWindow()
let homeViewController = BeginCheckoutViewController()
let navController  = UINavigationController(rootViewController: homeViewController)
self.window?.rootViewController = navController
window?.makeKeyAndVisible()

我们只在iPhoneX上遇到了类似的问题。你试过不同的模拟器吗?也许是同样的问题。

尝试使用底部锚而不是安全区域布局指南。底部锚:stackView.bottomAnchor.constraint(equalTo: bottomAnchor)

在iPhoneX上,safeAreaLayoutGuide.bottomAnchor与bottomAnhor不相同,因为边缘是圆形的(否则可能会丢失内容(。所以,如果你的屏幕底部没有UITabBar或其他东西来填补空白,这可能会有所帮助。

试试这个:

stackView.setCustomSpacing(100, after: YourLastItemInStackview)

您可以添加一个空的UIView作为堆栈视图的最后一项,其高度为底部边距所需的高度。

最新更新