使用 UINavigationController 时 UIStackView 无法设置底部约束
Posted
技术标签:
【中文标题】使用 UINavigationController 时 UIStackView 无法设置底部约束【英文标题】:UIStackView can't set bottom constraint when using UINavigationController 【发布时间】:2018-07-26 07:51:54 【问题描述】:我有 UIView,其中 UIStackView 是子视图。通常它会填充 UIView。但是,当我将 UIView 嵌入 UINavigationController 时,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()
【问题讨论】:
你在哪里打电话给setConstraints
?
【参考方案1】:
我们只在 iPhoneX 上遇到过类似的问题。你试过不同的模拟器吗?也许是同样的问题。
尝试使用bottomAnchor代替safeAreaLayoutGuide.bottomAnchor:stackView.bottomAnchor.constraint(equalTo: bottomAnchor)
在 iPhoneX 上,safeAreLayoutGuide.bottomAnchor 与 bottomAnchor 不同,因为边缘是圆形的(否则可能会丢失内容)。因此,如果您的屏幕底部没有 UITabBar 或其他东西来填补空白,这可能会有所帮助。
【讨论】:
我尝试了一个不同的模拟器,也一直在我的 iPhone 6s 上运行。当我尝试您的建议时,行为是相同的。以上是关于使用 UINavigationController 时 UIStackView 无法设置底部约束的主要内容,如果未能解决你的问题,请参考以下文章
UINavigationcontroller 中未使用的视图会发生啥?
使用 push segue 时 UINavigationController 是不是强制
UINavigationController - 使用 UIBlurEffect 清除背景
一起使用 UITabBarController 和 UINavigationController