在界面生成器中,使用.xib文件的@IBDesignable类无法渲染

4
我有一个名为CustomClass.swiftCustomClass.xib的文件。我想让XCode的Interface Builder使用提供的.xib文件来呈现CustomClass类的视图,就像在运行应用程序时一样。
我正在使用XCode8.3.2(8E2002)
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和一个UILabelCustomClass.xib

问题是,即使我在CustomClass.swift中有@IBDesignable,它也没有在Interface Builder中渲染。我将一个UIView放置在那里,并将其类设置为CustomClassenter image description here

正如您所看到的那样,在检查器中甚至显示Designables: Up to date。但我什么都看不到。

运行应用程序时,一切都按预期工作!


每个IBDesignable只有200毫秒的时间在Storyboard上呈现,如果组件在200毫秒内无法呈现,则会在警告选项卡(第4个左侧面板)中收到警告。 - Tejas Ardeshna
没有任何警告。但是组件没有渲染。 - Marmelador
@Marmelador 你所说的“在InterfaceBuilder中渲染”是什么意思? - Jack
我希望XCode的Interface Builder使用提供的.xib文件来渲染CustomClass类的视图,就像运行应用程序时一样。 - Marmelador
你最终解决了这个问题吗?如果是的话,你做了什么? - Adrian
最终我在另一个项目中让它正常工作了。因此,我建议从一个干净的项目开始会有助于追踪问题。 - Marmelador
1个回答

1

你为什么要这样做?

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

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

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

我不确定为什么你的视图没有加载,即使你已经将它指定为IBDesignable。我通常使用以下步骤进行故障排除。

  • 关闭并重新打开Xcode
  • 清理Xcode
  • 等待一段时间,通常大约一分钟左右,你会看到视图刷新/更新自己,显示你自定义绘制的内容

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接