我有一堆视图控制器,它们的布局略有不同,但对顶部UILabel的垂直位置有相同的要求。从状态栏开始,它始终是X(= 70)单位。这些视图控制器是否可以通过导航栏添加到导航控制器中。

我该如何制定一个相对通用的布局约束来说明导航栏,以便无论视图控制器是否位于导航堆栈中,我的标题始终是状态栏的X个单位?

(我知道我可以在运行时更改现有约束的常量,但是对于许多带有xibs的控制器而言,这可能会有些问题。我正在寻找更通用的东西,最好是在接口生成器中)

我正在将iOS 11 SDK与安全区域指南一起使用。

请查看图片以更清楚。

  • 状态栏,状态栏仅包含X个单位。常量X到安全区域的顶部有一个约束。

  • ios - iOS。设置布局约束以粘贴到状态栏底部+ X,而不考虑导航栏-LMLPHP
  • 状态栏+导航栏。安全区域的顶部再次受到约束,但这一次要获得我想要的结果,我不得不从X.常量X-navbar.height中减去navbar.height。

  • ios - iOS。设置布局约束以粘贴到状态栏底部+ X,而不考虑导航栏-LMLPHP

    基本上,我在寻找一种可以根据导航栏的存在自动调整约束常数的工具。也许有可能通过在xib到xib之间“轻松”复制的几个约束条件来实现这一目标。

    最佳答案

    如果您可以选择在代码中进行设置,则可以使用以下简单技巧:

    topLabel.topAnchor.constraint(equalTo: self.view.topAnchor, constant: UIApplication.shared.statusBarFrame.height + 70).isActive = true
    

    因此,基本上,您将其约束到视图的顶部(跳过topLayoutGuide和安全区域指南)为常量加上状态栏的高度。

    请注意,如果您允许横向模式,或者在状态栏被隐藏的情况下存在视图,则必须添加更多代码来处理这些情况。

    关于ios - iOS。设置布局约束以粘贴到状态栏底部+ X,而不考虑导航栏,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46243535/

    10-10 20:53