Swift 如何使用自动布局在自定义UIView中获取计算帧

Swift 如何使用自动布局在自定义UIView中获取计算帧,swift,uiview,autolayout,Swift,Uiview,Autolayout,我基于xib文件创建了一个自定义UIView,并添加了一些带有约束的UIView 在我的视图控制器中,我添加了一个UIView,并将该类设置为我的自定义视图。到现在为止,一直都还不错。我的自定义视图显示正确 但现在我有了一个@IBInspectable(numberOfButtons:Int),基于这个数字,我想以编程方式将UIButtons添加到我的自定义视图中。 我现在的问题是,我想将此按钮与自定义视图中的子视图对齐。因此,我尝试以编程方式设置按钮框架。但是当我在layoutSubviews

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

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

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

如何获得子视图的正确框架(计算约束),以便在LayoutSubView()中使用它们

或者我做错了什么


顺便说一下。似乎只有当我尝试使用iPad Pro 9.7英寸模拟器运行时,我的方法才有效

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

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

希望这将帮助您

而不是自己计算帧,您应该使用堆栈视图。这将是值得一看的,这并不能解决我的问题,因为按钮并不是我想要添加的基于numberOfButtons的唯一控件。我还想更改滚动视图的contentSize并将视图添加到此滚动视图。在那里,我不能使用堆栈视图。这就是我试图找出如何获得计算帧的原因。