我有一个按钮,其底部空间到Superview约束,常量为0,将其放在屏幕底部。视觉上,当我运行应用程序正是发生的事情时 - 按钮位于屏幕的底部。在代码中,我想获得按钮的frame.origin.y,这样我就可以在按钮上方以编程方式放置其他对象。
frame.origin.y + frame.height应该等于屏幕的高度,因为它正好放在底部,但是我从检查UIButton框架得到的值是不正确。
使用println查看值:
println("HomeBtn starts: \(homeBtn.frame.origin.y)")
println("HomeBtn height: \(homeBtn.frame.height)")
println("Screen height: \(self.view.frame.height)")
以下是结果......
在iPhone 6 +上:
HomeBtn starts: 528.0
HomeBtn height: 72.0
Screen height: 736.0
在iPhone 5上:
HomeBtn starts: 528.0
HomeBtn height: 72.0
Screen height: 568.0
在iPad上:
HomeBtn starts: 528.0
HomeBtn height: 72.0
Screen height: 1024.0
528和72对应于故事板/界面生成器中显示的HomeBtn值,但是对于Autolayout和不同的设备大小,这些值应该按设备更改。
在Autolayout放置UIView的位置(无论是button / imageView / label / etc)之后是否有更好的解决方案,而不是使用它的frame.origin和frame.height / width值?
答案 0 :(得分:1)
在自动布局运行之前,不会设置子视图的帧信息。您第一次看到子视图布局的机会在viewDidLayoutSubviews
。
override func viewDidLayoutSubviews() {
// Now that the views are all laid out, we can check their positions.
println("HomeBtn starts: \(homeBtn.frame.origin.y)")
println("HomeBtn height: \(homeBtn.frame.height)")
println("Screen height: \(self.view.frame.height)")
}