如何使用UIView
检索NSConstraint
的高度和/或宽度来计算CGFloat
的计算高度/宽度?
解释不同:
在使用autolayout和constraints布局元素之后,我想检索UIView's
“width”或“height”的list
值。
答案 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)
如果您获得的值无效,那么您的视图不会受到约束,或者您的视图在其父项布局之前正在调用它。