访问 @IBInspectable UIImage 时界面生成器代理崩溃

cyb*_*gen 4 interface-builder uiview ios 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
Run Code Online (Sandbox Code Playgroud)

file:///PathToMyProject/MyProject/Pod/Classes/UI/View/MyView.xib: error: IB Designables: Failed to render instance of MyView: The agent crashed
Run Code Online (Sandbox Code Playgroud)

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

import UIKit

@IBDesignable
class MyView: UIView {

    @IBInspectable
    var anImage: UIImage = UIImage(named: "image_one")!

}
Run Code Online (Sandbox Code Playgroud)

事实上,界面生成器代理在初始化该变量时崩溃。如果您编写var anImage: UIImage! = UIImage(named: "image_one"),则代理在访问此变量时会崩溃(如上所述)。

有任何想法吗?

小智 5

您不必在 IB 的检查器中设置图像,这是一个纯粹用代码编写的解决方案。

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