在运行时Swift之后根据边距约束获取视图高度

Gre*_*ory 5 constraints ios swift

我在屏幕中心有一个圆圈,50两端都有边距限制.因此,圆的宽度取决于屏幕尺寸.

所以,我试过的是这个:

方法1

我在故事板中设置边距以定义圆宽(50左右)

然后我使用了以下代码:

@IBOutlet weak var helpButHeight: NSLayoutConstraint!
@IBOutlet weak var helpBut: UIButton!
Run Code Online (Sandbox Code Playgroud)

viewDidLoad中:

helpButHeight.constant = helpBut.frame.size.width
Run Code Online (Sandbox Code Playgroud)

这没用.

由于屏幕宽度是400,并且边距是50两端,所以helpBut.frame.size.width应该给我300.

相反,它给了我46.

方法2

这是我的解决方法:

viewDidLoad中:

    let screenSize: CGRect = UIScreen.mainScreen().bounds
    helpButHeight.constant = screenSize.width - 100
Run Code Online (Sandbox Code Playgroud)

因为100 = 50 + 50,两个边缘.

工作良好 !

我为什么要这样做?为什么第一种方法不起作用?为什么46300呢?

Rei*_*ica 17

原因是在viewDidLoad函数中没有引入约束.生命周期看起来像

  • viewDidLoad - 约束没有设定
  • viewWillAppear - 约束没有设定
  • viewWillLayoutSubviews - 限制正在设定
  • viewDidLayoutSubviews - 设置约束
  • viewDidAppear - 设置约束