将xib文件加载到自定义NSView中嵌入另一个自定义NSView
问题描述:
我有一个自定义的NSView(称为Header
),我可以在运行时加载。然而,这个自定义的NSView(Header
)在运行时嵌入到另一个自定义NSView中,该运行时间更长,并且在底部产生额外的空间(我不希望这个额外的空间)。有没有另一种方式来加载一个xib文件,不会有这个问题?将xib文件加载到自定义NSView中嵌入另一个自定义NSView
这里是我如何加载XIB文件:
import Cocoa
class Header: NSView {
@IBOutlet var view: Header!
@IBOutlet weak var dateLabel: NSTextField!
override func draw(_ dirtyRect: NSRect) {
super.draw(dirtyRect)
// Drawing code here.
}
override init(frame frameRect: NSRect) {
super.init(frame: frameRect)
var topLevelObjects = NSArray()
Bundle.main.loadNibNamed("Header", owner: self, topLevelObjects: &topLevelObjects)
let view = ((topLevelObjects as Array).filter { $0 is NSView })[0] as! NSView
self.frame = NSRect(x: 0, y:0, width: view.frame.width, height: view.frame.height)
self.addSubview(self.view)
}
required init?(coder: NSCoder) {
super.init(coder: coder)
}
}
答
为什么你不使用约束和视图添加自己的头。太简单了。
let mainContainer = UIView()
mainContainer.backgroundColor = UIColor.blue
mainContainer.translatesAutoresizingMaskIntoConstraints = false
self.view.addSubview(mainContainer)
let views = ["mainContainer" : mainContainer]
let metrics = ["mainContainerWidth" : self.view.bounds.width]
self.view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|[mainContainer]|", options: [], metrics: metrics, views: views))
self.view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|[mainContainer]|", options: [], metrics: metrics, views: views))
这里有几个使用VF的例子。
我希望这个帮助。
嘿克里斯蒂安,会与一个NSView这项工作? – Rana
当然,如果你正在开发的NSView是iOS桌面应用程序,如果不使用UIView。这里有几个使用NSView的例子。 http://www.knowstack.com/swift-autolayout-visual-format-language-sample-code/ –