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



如何检索计算出的UIView的高度/宽度是使用NSConstraint允许的高度和/或宽度?

换个解释:我想在使用自动布局和约束对元素进行布局后检索UIView's"宽度"或"高度"的CGFloat值。

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

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

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

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

如果您没有自定义视图,但您在UIViewController中直接使用 textField,则该方法为 viewDidLayoutSubviews 。在视图控制器完成整个视图层次结构的布局后,将调用此函数。

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

如果我可以进一步帮助您,或者您还有其他问题,请告诉我。希望这对您的实施有所帮助。

以下是根据视图内容获得高度和宽度的方法

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

如果视图受到限制,则可以使用以下方法获取其"合适"大小:

let size = view.systemLayoutSizeFitting(UILayoutFittingCompressedSize)

如果得到无效值,则表示您的视图不受约束,或者您正在为其父视图布局之前调用它。

最新更新