IBDesignable UI 未在 Xcode 9 和 Swift 中显示
IBDesignable UI is not showing in Xcode 9 with Swift
我正在尝试使用我的自定义 xib 文件。但是 UI 没有显示在 xcode 的主视图控制器中。但它显示 运行 应用程序。我已经在 class 中添加了@IBDesignable。这是我所做的。
我创建了 TestView.xib 并添加了一些设计
我创建了TestView.swift
我在自定义 Class
中使用 TestView 更新了 TestView.xib 的文件所有者
我将初始化代码添加到 testView.swift
里面的代码TestView.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)
}
}
并添加到 UIMainViewController 中的视图和 link 到具有自定义 class 名称的 TestView。
之后我 运行 应用程序,我可以从 testView 看到 UI。 Image of emulator and result
- 但是我的自定义 UI 没有显示在 xcode Image of xcode view controller
的 MainViewController 中
如何才能在 MainViewController 中看到我的自定义 UI?谢谢
在 InterfaceBuilder select 中您的 ViewController 并选择 "Editor-->Refresh all Views"。然后你的自定义视图应该出现。
如果出现问题,您可以通过在代码中设置断点来调试 IBDesignable class,然后选择 "Editor-->Debug selected views"。
prepareForInterfaceBuilder()
只有在InterfaceBuilder中需要特殊设计外观才需要实现
有时需要清理项目和构建文件夹才能使其正常工作:
项目->清理
项目->(按住选项键)->清理构建文件夹
我刚刚更改了设置功能。它现在工作。 Final Result Image - It showing UI in IB
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
}
重写下面的两个函数:
override open func prepareForInterfaceBuilder() {
layer.cornerRadius = cornerRadius
layer.borderWidth = borderWidth
}
override open func awakeFromNib() {
layer.cornerRadius = cornerRadius
layer.borderWidth = borderWidth
}
我正在尝试使用我的自定义 xib 文件。但是 UI 没有显示在 xcode 的主视图控制器中。但它显示 运行 应用程序。我已经在 class 中添加了@IBDesignable。这是我所做的。
我创建了 TestView.xib 并添加了一些设计
我创建了TestView.swift
我在自定义 Class
中使用 TestView 更新了 TestView.xib 的文件所有者
我将初始化代码添加到 testView.swift
里面的代码TestView.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)
}
}
并添加到 UIMainViewController 中的视图和 link 到具有自定义 class 名称的 TestView。
之后我 运行 应用程序,我可以从 testView 看到 UI。 Image of emulator and result
- 但是我的自定义 UI 没有显示在 xcode Image of xcode view controller 的 MainViewController 中
如何才能在 MainViewController 中看到我的自定义 UI?谢谢
在 InterfaceBuilder select 中您的 ViewController 并选择 "Editor-->Refresh all Views"。然后你的自定义视图应该出现。
如果出现问题,您可以通过在代码中设置断点来调试 IBDesignable class,然后选择 "Editor-->Debug selected views"。
prepareForInterfaceBuilder()
只有在InterfaceBuilder中需要特殊设计外观才需要实现
有时需要清理项目和构建文件夹才能使其正常工作:
项目->清理
项目->(按住选项键)->清理构建文件夹
我刚刚更改了设置功能。它现在工作。 Final Result Image - It showing UI in IB
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
}
重写下面的两个函数:
override open func prepareForInterfaceBuilder() {
layer.cornerRadius = cornerRadius
layer.borderWidth = borderWidth
}
override open func awakeFromNib() {
layer.cornerRadius = cornerRadius
layer.borderWidth = borderWidth
}