【问题标题】:how to get calculated frames in custom UIView with auto layout如何使用自动布局在自定义 UIView 中获取计算帧
【发布时间】:2017-11-29 00:05:22
【问题描述】:

我创建了一个基于 xib 文件的自定义 UIView 并添加了一些带有约束的 UIVIews。

在我的视图控制器中,我添加了一个 UIView 并将该类设置为我的自定义视图。到现在为止还挺好。我的自定义视图显示正确。

但现在我确实有一个@IBInspectable (numerOfButtons: Int) 并且基于这个数字我想以编程方式将 UIButtons 添加到我的自定义视图中。 我现在的问题是,我想将此按钮与自定义视图中的子视图对齐。所以我尝试以编程方式设置我的按钮框架。但是当我在 layoutSubviews() 中执行此操作时,我的子视图不是根据我的自动布局约束计算的。我试图调用我的子视图的 setNeedsLayout() 和 layoutIfNeeded() 但这不起作用。

如何在 layoutSubviews() 中获取子视图的正确帧(通过计算约束)与它们一起使用

或者我做错了什么?

顺便说一句。看来我的方法只有在我尝试使用 iPad Pro 9.7 英寸模拟器运行时才有效?!

【问题讨论】:

  • 您应该使用堆栈视图,而不是自己计算帧。 developer.apple.com/videos/play/wwdc2015/218developer.apple.com/videos/play/wwdc2015/219 值得一看
  • 这并不能解决我的问题,因为按钮不是我要基于 numberOfButtons 添加的唯一控件。我还想更改滚动视图的 contentSize 并将视图添加到此滚动视图。在那里我不能使用堆栈视图。这就是我试图弄清楚如何获取计算帧的原因。

标签: swift uiview autolayout


【解决方案1】:

以编程方式设置约束将是耗时的事情,但幸运的是,我们有一个替代解决方案,library 非常容易设置约束

    let box = UIView()
    self.view.addSubview(box)
    box.snp.makeConstraints { (make) -> Void in
       make.width.height.equalTo(50)
       make.center.equalTo(self.view)
    }

希望对你有帮助

【讨论】:

    猜你喜欢
    • 2016-02-26
    • 2014-02-10
    • 1970-01-01
    • 1970-01-01
    • 2017-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多