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的所有者已正确设置。删除了错误,一切都很好。