使用 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

iPhone - UINavigationController - 使用 CATransaction 自定义动画

如何在 SwiftUI 中使用 UINavigationController