【发布时间】:2015-02-05 18:51:08
【问题描述】:
如何获得UIView 的宽度和高度,其大小和位置是使用自动布局和 Apple 的视觉格式语言设置的?
这是代码(view 只是来自UIViewController 的变量):
// Create and add the view
var stageView = UIView()
stageView.setTranslatesAutoresizingMaskIntoConstraints(false) // Since I'm using Auto Layout I turn this off
view.addSubview(stageView)
// Create and add constraints to the containing view
let viewsDictionary = ["stageView":stageView]
let horizontalConstraints: NSArray = NSLayoutConstraint.constraintsWithVisualFormat("H:|-150-[stageView]-150-|", options: NSLayoutFormatOptions(0), metrics: nil, views: viewsDictionary)
let verticalConstraints: NSArray = NSLayoutConstraint.constraintsWithVisualFormat("V:|-100-[stageView]-150-|", options: NSLayoutFormatOptions.AlignAllCenterX, metrics: nil, views: viewsDictionary)
view.addConstraints(horizontalConstraints)
view.addConstraints(verticalConstraints)
println("stageView.frame=\(stageView.frame)")
得到:
stageView.frame=(0.0,0.0,0.0,0.0)
所以我尝试了:
let fittingSize = stageView.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize)
println("fittingSize=\(fittingSize)")
得到:
fittingSize=(0.0,0.0)
我似乎找不到获取尺寸的方法。我可以使用 Auto Layout 和 Visual Format Language 将子视图添加到 stageView 这个地方就好了,但是我无法获得 stageView 的宽度和高度,我需要进一步定位这些子视图。
有什么想法吗?
【问题讨论】:
-
尝试添加
layoutIfNeeded。您的约束不会立即应用。 -
你说得对,这行得通。 @Aaron 的答案有更多信息,但我认为有些人可能会喜欢这个答案的简单性。随意添加您的评论作为答案,我会投票赞成这两个答案,因为它们对我都很有用。
标签: ios swift autolayout nslayoutconstraint visual-format-language