我创建了一个自定义UIView A,它嵌入到另一个自定义UIView B中,因为我想重用视图。
(不能发布超过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
感谢您的帮助或指示!
答案 0 :(得分:0)
在仔细检查每个文件(没有删除并从头开始)之后,我意识到XIB文件在Identity Inspector中有一个自定义类引用自身。这可能导致它以递归方式调用init(coder aDecoder: NSCoder)
,因此其位置失控。之前没有检测到这一点,因为我没有使用Autolayout使用自定义视图,一切都很好。是的,文件的XIB所有者设置正确。删除了错误,一切都很好。