IBDesignable XIB 由于加载方法而引发错误
Posted
技术标签:
【中文标题】IBDesignable XIB 由于加载方法而引发错误【英文标题】:IBDesignable XIB throws error due to loading method 【发布时间】:2018-05-16 07:37:10 【问题描述】:这两种情况都会导致代码正确运行,但使用 loadNibNamed
函数会导致 IB 渲染错误:
Bundle.main.loadNibNamed("myXib", owner: self, options: nil)
self.view.frame = bounds
self.view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
self.addSubview(self.view)
IB Designables 出现以下错误:
而在 IB 中使用它可以正确呈现:
guard let view = loadViewFromNib(name: "myXib") else return
view.frame = bounds
view.autoresizingMask = [.flexibleWidth, .flexibleHeight]
self.addSubview(view)
func loadViewFromNib(name : String) -> UIView?
let bundle = Bundle(for: type(of: self))
let nib = UINib(nibName: name, bundle: bundle)
return nib.instantiate(withOwner: self, options: nil).first as? UIView
我们将不胜感激。
【问题讨论】:
...sooo 是什么错误? 为什么第一个throw方法会抛出IB渲染错误?为什么投反对票,似乎是一个合法的问题?即使我找到了解决方法。 因为我们不知道错误是什么。你有什么问题? 查看添加的图片。 你试过debug selected views
吗?
【参考方案1】:
在加载 xibs 时不应使用Bundle.main
,因为 IB 不知道您的主要捆绑包是什么。您应该始终根据某些类的位置找到捆绑包,例如你的第二个例子做了什么:
Bundle(for: type(of: self))
虽然如果您的应用中有多个模块,使用所有者的类型也是不安全的。
【讨论】:
在这种情况下,让 'bundle = Bundle(for: myXib.self)' 就足够了吗?谢谢! @Zyntx 如果myXib
是你的班级名称,那么是的。以上是关于IBDesignable XIB 由于加载方法而引发错误的主要内容,如果未能解决你的问题,请参考以下文章
@IBDesignable 无法使用 Swift 3 呈现类实例并崩溃代理
使用Swift在Xcode 9中不显示IBDesignable UI