【问题标题】:@IBDesignable class with .xib-File not rendering in Interface Builder带有 .xib-File 的 @IBDesignable 类未在 Interface Builder 中呈现
【发布时间】:2017-06-06 13:06:22
【问题描述】:

我有一个CustomClass.swift 和一个CustomClass.xib。我希望 XCode 的 Interface Builder 使用提供的 .xib 文件呈现类 CustomClass 的视图。就像我运行应用程序时一样。

我正在使用 XCode 8.3.2 (8E2002)

CustomClass.swift

import UIKit


@IBDesignable class forceInterface: UIView {

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

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        Bundle.main.loadNibNamed("forceInterface", owner: self, options: nil)
        self.addSubview(view)
        view.frame = self.bounds

    }



    @IBOutlet var view: UIView!
    @IBOutlet weak var label: UILabel!
    @IBOutlet weak var progressView: UIProgressView!

    override func prepareForInterfaceBuilder() {
        super.prepareForInterfaceBuilder()

    }
}

CustomClass.xib

文件所有者设置为CustomClass。它包含一个UIView,其中包含一个UISwitch 和一个UILabel

问题是,尽管我的CustomClass.swift 中有@IBDesignable,但它并未在InterfaceBuilder 中呈现。我在那里放置一个UIView 并将其类设置为CustomClass

如您所见,它甚至在检查器中显示 Designables: Up to date。但我什么也没看到。

运行应用时一切正常!

【问题讨论】:

  • 每个 ibdesignable 只有 200 毫秒在情节提要上渲染它,如果组件在 200 毫秒内渲染失败,那么您将在警告选项卡(左侧第 4 个面板)中收到警告。
  • 没有没有警告。然而组件没有渲染。
  • @Marmelador “在 InterfaceBuilder 中渲染”是什么意思
  • 我希望 XCode 的 Interface Builder 使用提供的 .xib 文件呈现类 CustomClass 的视图。就像我运行应用程序时一样。
  • 你有没有想过这个问题?如果是这样,你做了什么?

标签: swift xcode uiview ibdesignable


【解决方案1】:

你为什么这样做

self.addSubview(view)
view.frame = self.bounds

您应该在将视图作为子视图添加到其父视图之前分配视图的框架

view.frame = self.bounds
self.addSubview(view)

我不确定为什么即使您已将其指定为 IBDesignable,您的视图仍未加载。我通常使用这些步骤进行故障排除。

  • 关闭并重新打开 Xcode
  • 清理 Xcode
  • 稍等片刻,通常大约一分钟左右,您将看到视图自行刷新/更新,显示您自定义绘制的内容

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-29
    • 2015-07-11
    • 2020-02-05
    • 2021-07-31
    • 1970-01-01
    • 2010-12-10
    相关资源
    最近更新 更多