2017-11-18 170 views
0

注:并非创建视图控制器在故事板如何获得以编程方式创建的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 

有没有其他办法?

回答

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)

+0

我有要求滚动视图应滚动到顶视图。这就是为什么我需要safeAreaLayoutGuide高度 –

+0

也许我误解了这个问题。使用自动布局锚点,只需像我的代码那样为透明视图设置滚动视图的顶部锚点即可。如果你正在谈论内容窗口,那么我的代码不会给你提供你需要的值吗? – dfd

+0

我需要计算从顶部到底部和底部到顶部滚动抽屉的高度,这就是为什么我需要安全区域的值 –

相关问题