由于我不使用故事板来创建视图,我想知道是否有"使用安全区域指南"选项以编程方式或类似的方式.
我试着把我的观点固定在
view.safeAreaLayoutGuide
但它们一直在与iPhone X模拟器中的顶级产品重叠.
由于我不使用故事板来创建视图,我想知道是否有"使用安全区域指南"选项以编程方式或类似的方式.
我试着把我的观点固定在
view.safeAreaLayoutGuide
但它们一直在与iPhone X模拟器中的顶级产品重叠.
以下是示例代码(引用自:Safe Area Layout Guide):
如果您在代码中创建约束,请使用UIView的safeAreaLayoutGuide属性获取相关的布局锚点.让我们用代码重新创建上面的Interface Builder示例,看看它是什么样子:
假设我们将绿色视图作为视图控制器中的属性:
private let greenView = UIView()
我们可能有一个函数来设置从viewDidLoad调用的视图和约束:
private func setupView() {
greenView.translatesAutoresizingMaskIntoConstraints = false
greenView.backgroundColor = .green
view.addSubview(greenView)
}
一如既往地使用根视图的layoutMarginsGuide创建前导和尾随边距约束:
let margins = view.layoutMarginsGuide
NSLayoutConstraint.activate([
greenView.leadingAnchor.constraint(equalTo: margins.leadingAnchor),
greenView.trailingAnchor.constraint(equalTo: margins.trailingAnchor)
])
现在,除非您的目标是iOS 11及更高版本,否则您需要使用#available包装安全区域布局指南约束,并返回到早期iOS版本的顶部和底部布局指南:
if #available(iOS 11, *) {
let guide = view.safeAreaLayoutGuide
NSLayoutConstraint.activate([
greenView.topAnchor.constraintEqualToSystemSpacingBelow(guide.topAnchor, multiplier: 1.0),
guide.bottomAnchor.constraintEqualToSystemSpacingBelow(greenView.bottomAnchor, multiplier: 1.0)
])
} else {
let standardSpacing: CGFloat = 8.0
NSLayoutConstraint.activate([
greenView.topAnchor.constraint(equalTo: topLayoutGuide.bottomAnchor, constant: standardSpacing),
bottomLayoutGuide.topAnchor.constraint(equalTo: greenView.bottomAnchor, constant: standardSpacing)
])
}
Result:
以下是苹果开发者Safe Area Layout Guide的官方文档
需要安全区来处理iPhone-X的用户界面设计.以下是How to design user interface for iPhone-X using Safe Area Layout人的基本指导方针