Swift 子视图在情节提要上的大小计算错误

Swift 子视图在情节提要上的大小计算错误,swift,xcode,autolayout,Swift,Xcode,Autolayout,我有以下问题: 这种情况仅在某些屏幕尺寸上发生。此视图位于链接到此处列出的单独文件的nib中: import Foundation import UIKit class FooterActionView : UIView { @IBOutlet weak var actionButton: UIButton! let nibName = "FooterActionView" required init?(coder aDecoder: NSCoder) {

我有以下问题:

这种情况仅在某些屏幕尺寸上发生。此视图位于链接到此处列出的单独文件的nib中:

import Foundation
import UIKit

class FooterActionView : UIView {

    @IBOutlet weak var actionButton: UIButton!

    let nibName = "FooterActionView"

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        commonInit()
    }

    override init(frame: CGRect) {
        super.init(frame: frame)
        commonInit()
    }

    func commonInit() {
        guard let view = loadViewFromNib() else { return }
        view.frame = self.bounds
        self.addSubview(view)
    }

    func loadViewFromNib() -> UIView? {
        let nib = UINib(nibName: nibName, bundle: nil)
        return nib.instantiate(withOwner: self, options: nil).first as? UIView
    }

}
我已经确认故事板上的约束是完全正确的(并且不会导致对视图宽度的错误计算)。 此视图是从另一个视图控制器子类化的,如下所示:

我到哪里去看看是什么引起的?(我再次相当肯定这不是限制因素)。我试着在谷歌上搜索,但找不到任何解释。非常感谢您的帮助

你是说

    view.frame = self.bounds
在我们还不知道什么是
self.bounds
的时候。然后约束开始生效,
self.bounds
的边界发生变化。但是
view.frame的框架没有

一个简单的解决方案是,当
self.bounds
发生变化时,让您的
视图能够调整自身大小:

    view.frame = self.bounds
    view.autoresizingMask = [.flexibleWidth, .flexibleHeight]

或者您可以等到
layoutSubviews
设置
view.frame

那么什么时候调用该方法合适呢?我从一个关于UI组件子类化的在线教程中复制了这一点。
layoutSubviews
是指视图遵守其约束并进行布局。或者使用自动调整大小,甚至自动布局,以便
view.frame
始终是正确的大小。