使用Swift在Xcode 9中不显示IBDesignable UI

问题描述 投票:2回答:3

我试图使用我的自定义xib文件。但是那些UI没有在xcode中的主视图控制器中显示。但它显示运行应用程序时。我已经在课堂上添加了@IBDesignable。这就是我做的。

  1. 我创建了TestView.xib并添加了一些设计
  2. 我创建了TextView.swift
  3. 我在自定义类中使用TextView更新了UITextView.xib的文件所有者
  4. 我向testView.swift添加了init代码

TextView.swift中的代码

import UIKit

@IBDesignable class DetailView: UIView {

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

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)!
    self.setup()

}

func setup() {
    let view = Bundle.main.loadNibNamed("TestView", owner: self, options: nil)?.first as! UIView
    view.frame = self.bounds
    self.addSubview(view)
}

}
  1. 并在MainViewController中的UIView上添加,并使用自定义类名链接到TestView。
  2. 之后我运行应用程序,我可以从testView中看到UI。 Image of emulator and result
  3. 但我的自定义UI不会在xcode Image of xcode view controller中的MainViewController中显示

如何在MainViewController中启用自定义UI?谢谢

ios swift uiview xcode9 ibdesignable
3个回答
5
投票

在Interface Builder中,选择您的UIViewController并选择“Editor - > Refresh all Views”。然后你的自定义视图应该出现。

如果出现问题,您可以通过在代码中设置断点来调试IBDesignable类,然后选择“编辑器 - >调试所选视图”。

如果在Interface Builder中需要特殊的设计外观,则只需要实现qazxsw poi。

有时需要清理项目并构建文件夹以使其工作: 项目 - >清除 项目 - >(按住选项键) - >清理构建文件夹


2
投票

我刚刚更改了设置功能。它现在正在运作。 prepareForInterfaceBuilder()

Final Result Image - It showing UI in IB

0
投票

覆盖以下两个func for live:

func setup() {
    view = loadViewFromNib()
    view.frame = bounds
    view.autoresizingMask = UIViewAutoresizing(rawValue: UIViewAutoresizing.RawValue(UInt8(UIViewAutoresizing.flexibleWidth.rawValue) | UInt8(UIViewAutoresizing.flexibleHeight.rawValue)))

    self.addSubview(view)
}

func loadViewFromNib() -> UIView {
    let bundle = Bundle(for: type(of: self))
    let nib = UINib(nibName: "TestView", bundle: bundle)
    let view = nib.instantiate(withOwner: self, options: nil)[0] as! UIView
    return view
}
© www.soinside.com 2019 - 2024. All rights reserved.