我有一堆视图控制器,布局略有不同,但对顶部UILabel的垂直位置要求相同。它始终是状态栏中的X(= 70)单位。这些视图控制器可能会添加到带有导航栏的导航控制器中。
如何使用相对通用的布局约束来计算导航栏,这样无论视图控制器是否在导航堆栈中,我的标题始终是状态栏中的X个单位?
(我知道我可以在运行时更改现有约束的常量,但是对于许多带有xib的控制器来说这可能有点问题。我正在寻找更通用的东西,最好是在界面构建器中)
我正在使用带有安全区域指南的iOS 11 SDK。
请查看图片以获得更清晰的信息。
答案 0 :(得分:1)
如果在代码中设置它是一个选项,你可以使用这个简单的黑客:
topLabel.topAnchor.constraint(equalTo: self.view.topAnchor, constant: UIApplication.shared.statusBarFrame.height + 70).isActive = true
所以基本上你将它限制在视图顶部(跳过topLayoutGuide和安全区域指南)到常量加上状态栏的高度。
请注意,如果您允许横向模式,或者隐藏了状态栏的视图,则必须添加更多代码来处理这些情况。