我正在尝试使用我创建的自定义 View 。
我使用 nib 的实例化,但它会导致无限循环,我不确定如何修复。有什么想法吗?
这是运行结果的图片:
这是导致问题的代码:
// MARK: - Init & Setup
// Needed for IBDesignable
override init(frame: CGRect) {
super.init(frame: frame)
setup()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setup()
}
func setup(){
view = loadViewFromNib()
view.frame = bounds
view.autoresizingMask = UIViewAutoresizing(rawValue: UIViewAutoresizing.RawValue(UInt8(UIViewAutoresizing.flexibleWidth.rawValue) | UInt8(UIViewAutoresizing.flexibleHeight.rawValue)))
addSubview(view)
}
func loadViewFromNib() -> UIView{
let bundle = Bundle(for:type(of: self))
let nib = UINib(nibName: "LoginView", bundle: bundle) // TEST: changin bundle from bundle-> nil
let view = nib.instantiate(withOwner: self, options: nil)[0] as! UIView
return view
}
编辑:这是连接的图像
谢谢:)
最佳答案
快速回答:
由于 Xib 中的顶级 View 将其 自定义类
设置为 YourCustomeView,因此 xib 加载过程 loadViewFromNib
将再次调用您的 initWithCoder
方法⛔️🚫♽。
快速修复:
在 Xib 中,不要将 View 的自定义类设置为 YourCustomeView,而是将 YourCustomeView 设置为 Xib 的 The File Owner
。
更多信息 https://medium.com/@anandin02/loading-custom-views-in-ios-the-right-way-bedfc06a4fbd
关于swift - 从 nib 实例化 UIView 导致无限循环问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49127025/