首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何找出从底部安全区边缘到屏幕底部的距离?

如何找出从底部安全区边缘到屏幕底部的距离?
EN

Stack Overflow用户
提问于 2017-11-18 23:48:10
回答 4查看 9.4K关注 0票数 14

我需要计算安全区域底部锚与屏幕底部之间的距离。在给定视图的代码中,有办法做到这一点吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-11-20 10:14:09

试试这个

代码语言:javascript
复制
if #available(iOS 11.0, *) {
    let window = UIApplication.shared.keyWindow
    let bottomPadding = window?.safeAreaInsets.bottom
}
票数 33
EN

Stack Overflow用户

发布于 2017-11-19 02:25:35

您可以尝试将子视图(清除、隐藏或其他)固定在safeAreaLayoutGuide的底部,并计算此视图的底部与viewDidLayoutSubviews中视图控制器的视图之间的差异。

代码语言:javascript
复制
class ViewController: UIViewController {
    let measuringView = UIView()
    override func viewDidLoad() {
        super.viewDidLoad()
        measuringView.backgroundColor = .magenta
        measuringView.translatesAutoresizingMaskIntoConstraints = false
        view.addSubview(measuringView)
        let vConstraint = measuringView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor)
        let heightConstraint = measuringView.heightAnchor.constraint(equalToConstant: 34)
        var constraints = NSLayoutConstraint.constraints(withVisualFormat: "|[measuring]|", options: [], metrics: nil, views: ["measuring": measuringView])
        constraints.append(vConstraint)
        constraints.append(heightConstraint)
        NSLayoutConstraint.activate(constraints)
    }

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
        let measuringBottom = measuringView.frame.origin.y + measuringView.frame.height
        let viewBottom = view.bounds.height
        let distance = abs(measuringBottom - viewBottom)
        print("distance is \(distance) points")
    }
}

票数 1
EN

Stack Overflow用户

发布于 2017-11-19 02:35:52

重新迭代以前的答案。将子视图引脚到UIViewController视图的底部。然后将第二个锚钉到视图的view.safeAreaLayoutGuide.bottomAnchor锚点上。将两个子视图固定在父视图的topleadingtrailing锚点上。然后,我假设在viewDidAppear中,您可以打印出两个子视图的frame.maxY值之间的差异。这应该会给你区别。

代码语言:javascript
复制
let viewA = UIView()

let viewB = UIView()

override func viewDidLoad() {

    view.addSubview(viewA)
    view.addSubview(viewB)
    viewA.translateAutoResizingMasksIntoConstraints = false
    viewB.translateAutoResizingMasksIntoConstraints = false


        if #available(iOS 11.0, *) {
            NSLayoutConstraint.activate([viewA.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 0),
                                         viewA.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor, constant: 0),
                                         viewA.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor, constant: 0),
                                         viewA.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, constant: 0),
                                         viewB.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 0),
                                         viewB.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor, constant: 0),
                                         viewB.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor, constant: 0),
                                         viewB.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 0)])
        } else {
            // Fallback on earlier versions
        }

}

override func viewDidAppear() {

    super.viewDidAppear()
    print("Safe Distance Value is:\(viewA.frame.maxY - viewB.frame.maxY)")

}

作为其他人的参考,这个值似乎是34在iPhone X模拟器上

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47372319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档