iOS Autolayout - 在半透明导航栏下方正确定位视图

时间:2013-06-22 23:15:16

标签: ios storyboard uinavigationbar autolayout

在我的故事板中,我有一个UIImageView,我希望将其放置在半透明导航栏下方的固定距离处。我将视图控制器的模拟顶部栏设置为半透明栏,我现在所说的约束"顶级空间到Superview等于52,"酒吧下方8点。

但是,当视图旋转到横向时,导航栏缩小到34点,图像视图仍然像在纵向中一样处于52点。

我可以在IB中使用什么约束来将图像视图放置在导航栏下方的8个点,无论条形图有多高?

谢谢!

5 个答案:

答案 0 :(得分:2)

选择您的UIImageView并按住Ctrl键拖动到“顶部布局指南”以创建约束。如果您不熟悉“顶部布局指南”,可以在左侧的结构视图中选择它。

答案 1 :(得分:1)

正如Nestor指出的那样,您要设置顶部间距与视图的上边缘,而不是最近的邻居,即导航栏。您应该使用“顶部布局指南”设置顶部间距约束,以便无论大小等级和方向如何都可以修复它。

要执行此操作,请从文档大纲视图中按住ctrl单击并从UIImageView拖动一行到Top Layout Guide,然后从列表中选择Vertical Spacing

enter image description here

答案 2 :(得分:0)

在storyBoard中选择imageView和topBar。在屏幕的右下角,您会看到一个看起来像H:

的按钮

enter image description here

选择它并选择“垂直间距”。将约束设置为8像素,它应该可以工作。

答案 3 :(得分:0)

swift 4,iOS11 +,SnapKit

imageView.snp.makeConstraints { (maker) in
   maker.top.equalTo(view.safeAreaLayoutGuide.snp.top).offset(8)
}

答案 4 :(得分:0)

如果您使用旧的 Xcode,您的 ViewController 将can connect topLayoutGuidebottomLayoutGuide
但现在它的方式已被弃用。对于新操作系统的应用程序,you should use safeAreaLayoutGuide 视图。

IB 不支持区分操作系统,但您可以在 IB 中创建临时约束并从代码中添加真正的约束:

enter image description here

然后在 viewDidLoad 的某个地方添加一个代码:

if #available(iOS 11.0, *) {
    label.topAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.topAnchor).isActive = true
} else {
    label.topAnchor.constraint(equalTo: self.topLayoutGuide.bottomAnchor).isActive = true
}