访问@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)