我正在尝试以编程方式为一些标签、按钮和文本字段设置与安全区域的高度和宽度相关的约束。例如,我希望将标签到安全区域顶部的距离设置为安全区域高度的10%。
如何检索安全区域的高度和宽度?
这是一种合理的方法吗?我的想法是,无论iOS设备是什么,我的屏幕都会自动调整。
谢谢你的帮助!
发布于 2019-01-20 17:53:22
你可以通过存储安全区域的帧来获得高度。safeAreaLayoutGuide有一个名为layoutFrame的属性。
let frame = self.view.safeAreaLayoutGuide.layoutFrame
print(frame.height)
print(frame.width)我做了一个UIView扩展,它创建了一个名为safeAreaFrame的read-only property。
如果iOS版本为11或更高版本的,则safeAreaFrame将是安全区的帧。
否则,它将是bounds (仅仅是视图的框架)。
extension UIView {
public var safeAreaFrame: CGRect {
if #available(iOS 11, *) {
return safeAreaLayoutGuide.layoutFrame
}
return bounds
}
}示例:
let frame = self.view.safeAreaFrame
print(frame.height)
print(frame.width)发布于 2018-02-28 21:47:07
if #available(iOS 11.0, *) {
if let window = UIApplication.shared.keyWindow {
let safeAreaBottom = window.safeAreaInsets.bottom
let safeAreaLeft = window.safeAreaInsets.left
let safeAreaRight = window.safeAreaInsets.right
let safeAreaTop = window.safeAreaInsets.top
}
}发布于 2020-08-12 11:35:46
override func viewDidLayoutSubviews()
super.viewDidLayoutSubviews()
let safeAreaHeight = view.safeAreaLayoutGuide.layoutFrame.height
let safeAraeWidth = view.safeAreaLayoutGuide.layoutFrame.width
}请记住在viewDidLayoutSubviews函数中执行此操作,或者在任何函数中设置约束,然后在viewDidLayoutSubviews中调用该函数。
viewDidLoad不会给你提供安全区框,因为它在加载视图之前运行。
https://stackoverflow.com/questions/48971598
复制相似问题