访问@IBInspectable UIImage时,界面构build器代理崩溃

我通过@IBInspectable UIView并使用@IBInspectable来实现一个自定义视图。 其中两个是UIImage。 如果我尝试在代码中访问其中的一个,那么界面生成器会崩溃,并显示以下消息:

 file:///PathToMyProject/MyProject/Pod/Classes/UI/View/MyView.xib: error: IB Designables: Failed to update auto layout status: The agent crashed 

 file:///PathToMyProject/MyProject/Pod/Classes/UI/View/MyView.xib: error: IB Designables: Failed to render instance of MyView: The agent crashed 

一切在模拟器和设备上运行良好。 以下是如何重现它,假设image_one.png在资产中:

 import UIKit @IBDesignable class MyView: UIView { @IBInspectable var anImage: UIImage = UIImage(named: "image_one")! } 

事实上,界面生成器代理在初始化这个variables时崩溃了。 如果你写var anImage: UIImage! = UIImage(named: "image_one") var anImage: UIImage! = UIImage(named: "image_one") ,那么当访问这个variables时代理崩溃(如上所述)。

有任何想法吗?

问题是,Interface Builder中的图像path与您的应用程序中的图像path不同,因此IB将取消引用零图像。 您可以通过使用可选项来修复此问题,然后在IB的“属性”检查器中设置图像。

这是更新的代码:

 import UIKit @IBDesignable class MyView: UIView { @IBInspectable var anImage: UIImage? = UIImage(named: "image_one") } 

您不必在IB的检查员中设置您的图像,而是纯粹的代码解决scheme。

 let bundle = Bundle(for: self.classForCoder) image = UIImage(named: "your_image.png", in: bundle, compatibleWith: self.traitCollection)! self.setImage(image, for: .normal)