在我的故事板中,UIImageView
我想将其放置在半透明导航栏下方的固定距离处。我将视图控制器的模拟顶栏设置为半透明栏,并且我现在的约束是“Top Space to Superview Equals 52”,位于栏下方 8 点。
但是,当视图旋转到横向时,导航栏缩小到 34 点,而图像视图仍然像纵向一样在 52 点。
无论导航栏有多高,我可以在 IB 中使用什么约束将图像视图放置在导航栏下方 8 点处?
谢谢!
在我的故事板中,UIImageView
我想将其放置在半透明导航栏下方的固定距离处。我将视图控制器的模拟顶栏设置为半透明栏,并且我现在的约束是“Top Space to Superview Equals 52”,位于栏下方 8 点。
但是,当视图旋转到横向时,导航栏缩小到 34 点,而图像视图仍然像纵向一样在 52 点。
无论导航栏有多高,我可以在 IB 中使用什么约束将图像视图放置在导航栏下方 8 点处?
谢谢!
选择您UIImageView
并按住 Control 拖动到顶部布局指南以创建约束。如果您不熟悉 Top Layout Guide,可以在左侧的结构视图中选择它。
正如 Nestor 指出的那样,您正在设置视图顶部边缘的顶部间距,而不是最近的邻居,即导航栏。您应该使用顶部布局指南设置顶部间距约束,以使其固定,无论尺寸等级和方向是什么。
为此,在文档大纲视图中,按住 ctrl 单击并从UIImageView
到拖动一条线,然后从列表中Top Layout Guide
选择。Vertical Spacing
在storyBoard 中同时选择imageView 和topBar。在屏幕的右下角,您会看到一个看起来像 H 的按钮:
选择它并选择“垂直间距”。将约束设置为 8 个像素,它应该可以工作。
Swift 4、iOS11+、SnapKit
imageView.snp.makeConstraints { (maker) in
maker.top.equalTo(view.safeAreaLayoutGuide.snp.top).offset(8)
}
如果您使用旧的 Xcode,您将可以连接 topLayoutGuide
或连接bottomLayoutGuide
您的 ViewController。
但现在这种方式已被弃用。对于新操作系统的应用程序,您应该使用 safeAreaLayoutGuide
视图。
IB 不支持区分操作系统,但您可以在 IB 中创建临时约束并从代码中添加实际约束:
之后在以下位置添加代码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
}