UIButton.frame.origin.y不是正确的值

时间:2015-08-02 17:33:30

标签: ios swift position autolayout frame

我有一个按钮,其底部空间到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值?

1 个答案:

答案 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)") 
}