从 NSLayoutConstraint 获取高度值

get Height Value from NSLayoutConstraint

在我的项目中,我使用的是AutoLayOut,有一个UIView 是subView 主视图,我将它的宽度(使用约束)设置为等于2 :3 superView 的宽度和它的高度等于它的视图。我需要视图是圆形的,所以我将它的 cornerRadius 设置为 heightOfView/2。视图的高度和宽度有 1:1 纵横比。我已经将该约束的出口创建为

 @IBOutlet weak var circleHeight: NSLayoutConstraint

现在我想访问它的高度或宽度,但我没有 gwtting 实际值,

circleHeight.firstItem.frame.width

我正在获取我从情节提要中存储的值,有一些我遗漏但无法弄清楚的东西

选定的视图应该是圆形的。但是当我打印它的包含值时,它给出的高度和宽度仅为 214

约束没有高度或宽度,只有关系、优先级和常量值,具体取决于您如何设置约束本身。

要访问您感兴趣的子视图的高度,您需要像往常一样访问:

<uiview_outlet>.frame.size.height

希望对您有所帮助。

你可以为这个UIView创建IBOutlet,它应该是圆形的。 然后在 viewDidLayoutSubviews() 方法中你可以读取它的高度并使它成为圆圈:

override func viewDidLayoutSubviews() {
    let viewHeight = CGRectGetHeight(yourView.frame)
    yourView.layer.cornerRadius = viewHeight / 2
    yourView.layer.masksToBounds = true
}
  1. 我认为您可能在 viewWillAppearViewDidLoad 但是当这些方法被获取时视图框架不会被更新 叫
  2. 所以你需要在ViewDidAppear方法中获取宽度或高度。
  3. 如果得到ViewDidLayoutSubViews中的高度或宽度,性能 被多次调用后性能下降。

这是代码

override func viewDidAppear(animated: Bool){
       super.viewDidAppear(animated)
       let viewHeight = CGRectGetHeight(yourView.frame)
       yourView.layer.cornerRadius = viewHeight / 2
       yourView.layer.masksToBounds = true
    }