使用约束获取uiview的高度/宽度

时间:2016-02-20 05:28:55

标签: ios swift autolayout nslayoutconstraint

如何使用UIView检索NSConstraint的高度和/或宽度来计算CGFloat的计算高度/宽度?​​

解释不同: 在使用autolayout和constraints布局元素之后,我想检索UIView's“width”或“height”的list值。

3 个答案:

答案 0 :(得分:2)

当您确定您的观点完全由布局系统布局时,没有特别的意义。但是在每个布局周期之后都会调用一些方法。

因此,如果您的textField是自定义类或自定义UIView的一部分,如UITableViewCell,则此方法为layoutSubviews。在这种护理中,您可以使用以下代码获取大小:

override func layoutSubviews() {
    super.layoutSubviews()
    textWidth = textField.frame.width
    textHeight = textField.frame.height
}

每次布局发生变化时,此代码都会为您提供正确的值(如方向更改或某些其他元素更改其框架或约束)。

如果您没有自定义视图,但直接在UIViewController中使用textField,则方法为viewDidLayoutSubviews。在viewController完成整个视图层次结构的布局之后调用它。

override func viewDidLayoutSubviews() {
    super.layoutSubviews()
    textWidth = textField.frame.width
    textHeight = textField.frame.height
}

如果我可以进一步帮助您,或者您有更多问题,请告诉我。希望这有助于您的实施。

答案 1 :(得分:1)

以下是如何获得身高和身高的方法。 widht取决于视图的内容

let adjustedWidth = anyView.intrinsicContentSize.width 
let adjustedHeight = anyView.intrinsicContentSize.height

答案 2 :(得分:0)

如果视图受到约束,您可以使用以下方法获得“拟合”大小:

let size = view.systemLayoutSizeFitting(UILayoutFittingCompressedSize)

如果您获得的值无效,那么您的视图不会受到约束,或者您的视图在其父项布局之前正在调用它。