Xcode 自定义 UIView 显示不正确

Xcode Custom UIView Not Displaying Properly

我创建了一个嵌入到另一个自定义 UIView B 中的自定义 UIView A,因为我想重用视图。

(不能post超过2张所以省略)

我使用的swift代码如下:

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

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

private func setupView()
{
    let view = viewFromNibForClass()
    view.autoresizingMask = [
        .flexibleWidth,
        .flexibleHeight
    ]
    view.frame = bounds
    addSubview(view)
}

private func viewFromNibForClass() -> UIView
{
    let bundle = Bundle(for: type(of: self))
    let nib = UINib(nibName: String(describing: type(of: self)), bundle: bundle)
    let view = nib.instantiate(withOwner: self, options: nil).first as! UIView
    return view
}

将多个 UIView A(在堆栈中)放入 UIView B 时,视图会随机跳到父视图的左上角,有时会跳出视图框架。我必须暂时将调整大小掩码更改为:

view.autoresizingMask = [
        .flexibleWidth,
        .flexibleHeight,
        .flexibleTopMargin,
        .flexibleBottomMargin,
        .flexibleLeftMargin,
        .flexibleRightMargin
    ]

调整好后再改回来。但是,我仍然无法在不遇到多重冲突的情况下将任何简单的约束(例如高度或距离)应用到superview.leading

Custom UIView B containing several UIView A

要解决所有冲突,我必须删除所有约束并继续。然后,将 UIView B 放入我的主情节提要中的视图控制器中,将再次导致视图跳到某个奇怪的位置。我相信这归因于第一个查询中概述的 UIView A 的异常行为。

Generic view controller containing UIView B

感谢任何帮助或指点!

仔细检查每个文件(除了删除并从头开始)后,我意识到 XIB 文件有一个自定义 class 在身份检查器中引用自身。这可能导致它递归地调用它的 init(coder aDecoder: NSCoder),因此它的位置不正常。之前没有检测到这一点,因为我一直在使用没有自动布局的自定义视图,一切都很好。是的,XIB 的文件所有者设置正确。删除了错误,一切都很好。