iOS版。无论导航栏如何,都要将布局约束粘贴到状态栏底部+ X.

时间:2017-09-15 15:58:47

标签: ios nslayoutconstraint

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

如何使用相对通用的布局约束来计算导航栏,这样无论视图控制器是否在导航堆栈中,我的标题始终是状态栏中的X个单位?

(我知道我可以在运行时更改现有约束的常量,但是对于许多带有xib的控制器来说这可能有点问题。我正在寻找更通用的东西,最好是在界面构建器中)

我正在使用带有安全区域指南的iOS 11 SDK。

请查看图片以获得更清晰的信息。

  1. 状态栏仅限X个单位到状态栏。使用常数X对安全区域的顶部存在约束。
  2. 1.Status bar only

    1. 状态栏+导航栏。还有一个限制在安全区域的顶部,但这次得到我想要的结果,我不得不从X中减去navbar.height常数X - navbar.height。
    2. 2. Status bar + navigation bar

      基本上我会寻找能够根据导航栏的存在自动调整约束常数的东西。也许有可能通过一些约束来实现这一点,这些约束很容易和#34;从xib到xib可以复制。

1 个答案:

答案 0 :(得分:1)

如果在代码中设置它是一个选项,你可以使用这个简单的黑客:

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

所以基本上你将它限制在视图顶部(跳过topLayoutGuide和安全区域指南)到常量加上状态栏的高度。

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