Xcode自定义UIView没有正确显示

问题描述:

我已经创建了一个自定义UIView A嵌入到另一个自定义UIView B,因为我想重用视图。Xcode自定义UIView没有正确显示

(不能发布超过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文件具有在Identity Inspector中引用自己的自定义类。这可能导致它递归地调用它的init(coder aDecoder: NSCoder),因此它的位置失去了作用。之前没有检测到这一点,因为我没有使用Autolay的自定义视图,一切都很好。是的,该文件的XIB的所有者已正确设置。删除了错误,一切都很好。