如何获得以编程方式创建的ViewController的安全区框架?
问题描述:
注:并非创建视图控制器在故事板如何获得以编程方式创建的ViewController的安全区框架?
我创建视图控制器给安全防护支撑后编程现在我的问题是,我怎么能得到他的高度?
我尝试下面的事情,但没有运气
let guide = view.safeAreaLayoutGuide
let height = guide.layoutFrame.size.height
print("\(height)")
print("\(self.view.frame.height)")
height = 812.0, self.view height = 812.0
有没有其他办法?
答
A safeAreaLayoutGuide
,这是iOS 11+,是为了自动布局和尝试获得框架是接近尝试从柠檬橙汁。
如果你要的是找出是什么,你可以安全使用了一个框架,也许尝试这样的事:
创建一个透明的看法:
let mySafeView = UIView()
override func viewDidLoad() {
super.viewDidLoad()
mySafeView.backgroundColor = UIColor.clear
mySafeView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(mySafeView)
// if needed, send this view to the back of the hierarchy
view.sendSubview(toBack: mySafeView)
}
下一页,在您的约束建设代码中将其附加到true锚点:
// create generic layout guides
let layoutGuideTop = UILayoutGuide()
view.addLayoutGuide(layoutGuideTop)
let layoutGuideBottom = UILayoutGuide()
view.addLayoutGuide(layoutGuideBottom)
let margins = view.layoutMarginsGuide
view.addLayoutGuide(margins)
// get correct top/bottom margins based on iOS version
if #available(iOS 11, *) {
let guide = view.safeAreaLayoutGuide
layoutGuideTop.topAnchor.constraintEqualToSystemSpacingBelow(guide.topAnchor, multiplier: 1.0).isActive = true
layoutGuideBottom.bottomAnchor.constraintEqualToSystemSpacingBelow(guide.bottomAnchor, multiplier: 1.0).isActive = true
} else {
layoutGuideTop.topAnchor.constraint(equalTo: topLayoutGuide.bottomAnchor).isActive = true
layoutGuideBottom.bottomAnchor.constraint(equalTo: bottomLayoutGuide.topAnchor).isActive = true
}
mySafeView.topAnchor.constraint(equalTo: layoutGuideTop.topAnchor).isActive = true
mySafeView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
mySafeView.bottomAnchor.constraint(equalTo: layoutGuideBottom.bottomAnchor).isActive = true
mySafeView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
最后,得到的帧大小:
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
print(mySafeView.frame)
}
在iPhone 6加运行iOS 11.1您可以:
(0.0,28.0,414.0,716.0)
在iPhone 6上运行iOS 9.0,您将获得:
(0.0,20.0 ,414.0,716.0)
我有要求滚动视图应滚动到顶视图。这就是为什么我需要safeAreaLayoutGuide高度 –
也许我误解了这个问题。使用自动布局锚点,只需像我的代码那样为透明视图设置滚动视图的顶部锚点即可。如果你正在谈论内容窗口,那么我的代码不会给你提供你需要的值吗? – dfd
我需要计算从顶部到底部和底部到顶部滚动抽屉的高度,这就是为什么我需要安全区域的值 –