子视图在 Storyboard 上的大小计算错误

Subview Has Size Miscalculated on Storyboard

我有以下问题:

这只发生在某些屏幕尺寸上。此视图位于链接到此处列出的单独文件的 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 的框架没有。

一个简单的解决方案是让您的 view 能够在 self.bounds 发生变化时自行调整大小:

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

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