ios - 使用自动布局和 NSLayoutConstraints 以编程方式检索 UIView 的宽度和高度?

标签 ios swift autolayout nslayoutconstraint visual-format-language

如何获取使用自动布局和 Apple 的视觉格式语言设置大小和位置的 UIView 的宽度和高度?

这是代码(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)

我似乎找不到获取尺寸的方法。我可以使用自动布局和视觉格式语言向 stageView 添加 subview ,但我无法获得我需要的 stageView 的宽度和高度进一步定位这些 subview 。

有什么想法吗?

最佳答案

您有几个选择:

您可以通过调用 setNeedsLayout 然后调用 layoutIfNeeded 强制布局引擎立即调整 View 的大小。 不推荐这样做,因为它效率低下,而且布局所需的任何手动框架可能尚未设置。您可以在我的 answer to this question 上阅读有关此方法的更多信息.

您也可以等到 subview 在 View Controller 中更新:

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    println("stageView.frame = \(stageView.frame)")
}

如果您想了解 UIView 子类(或更常见的是 UITableViewCell 子类),您可以在 layoutSubviews 运行后进行检查:

override func layoutSubviews() {
    super.layoutSubviews()
    println("self.frame = \(self.frame)")
}

关于ios - 使用自动布局和 NSLayoutConstraints 以编程方式检索 UIView 的宽度和高度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28351769/

相关文章:

ios - 无法从 ParseUI 中删除“关闭”和“注册”按钮

ios - iOS App搜索-无论应用(显示)名称如何,如何搜索不同的单词以返回相同的应用

ios - 未调用 GKMatchmakerViewController 委托(delegate)方法

arrays - 在 UICollectionViewCell 中创建多个 UIImageView

ios - 无法在 iOS 11 中设置备用应用程序图标

ios - 如何消除 “Leading and Trailing constraints … there is already a center constraint” 警告

ios - 动画 UITableView 自动布局顶部约束导致崩溃,任何线索?

ios - 如何从类方法调用tableView

xcode - 如何并排放置按钮 Xcode WatchKit

swift - 在 Swift 中使用 _ 忽略参数是否会提高性能?