【问题标题】:Subclassed view's uiimage not appearing as IBDesignable子类视图的 uiimage 未显示为 IBDesignable
【发布时间】:2019-09-15 15:21:13
【问题描述】:

我已经设置了一个子类UIView,并希望在 IB 中看到嵌入的图像 - 所以我将其设置为 IBDesignable

@IBDesignable

class DieView: UIView {

    @IBInspectable
    var dieImage : UIImage = UIImage()

    override init(frame: CGRect) {
        super.init(frame: frame)
        updateLayout()
    }

    convenience init() {
        self.init(frame: CGRect.zero)
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        updateLayout()
    }

    // for IB
    override func prepareForInterfaceBuilder() {
        super.prepareForInterfaceBuilder()
        updateLayout()
    }

    func updateLayout() {
        self.backgroundColor = .red
        let profileImageView = UIImageView(frame: CGRect(x: 0, y: 0, width: self.frame.width, height: self.frame.height))
        profileImageView.image = UIImage(named: "dice1")
        profileImageView.contentMode = .scaleAspectFit
        profileImageView.layer.masksToBounds = false

        self.addSubview(profileImageView)


    }

    func showNumber(number: Int) {

    }

}

背景颜色发生变化,但嵌入的图像不会更新。为什么不呢?

【问题讨论】:

  • 你不会在任何地方使用那个图像,为什么它会出现?
  • 添加为子视图。它在运行时出现,那么用什么方法让它出现在storyboard上呢?
  • 我没有看到图片被添加到代码的任何地方,我只能看到这个UIImage(named: "dice1")正在被使用。
  • profileImageView.image = UIImage(named: "dice1") 然后添加到父 self.addSubview(profileImageView)

标签: ios swift ibdesignable


【解决方案1】:

来自prepareForInterfaceBuilder()documentation

Interface Builder 会一直等待,直到图中的所有对象都已创建 并在调用此方法之前进行初始化。所以如果你的对象 运行时配置依赖于子视图或父视图,那些 调用此方法时对象应该已经存在。

这表示在调用此方法之前应该存在子视图。我不确定,但尝试在调用之前添加图像视图。此外,您必须记住,prepareForInterfaceBuilder() 是由接口构建器独立调用的。阅读文档以获取更多信息。祝你好运!

【讨论】:

    猜你喜欢
    • 2017-12-08
    • 1970-01-01
    • 1970-01-01
    • 2015-01-02
    • 2016-12-18
    • 2015-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多