2017-07-06 108 views
0

我有一个自定义的NSView(称为Header),我可以在运行时加载。然而,这个自定义的NSView(Header)在运行时嵌入到另一个自定义NSView中,该运行时间更长,并且在底部产生额外的空间(我不希望这个额外的空间)。有没有另一种方式来加载一个xib文件,不会有这个问题?将xib文件加载到自定义NSView中嵌入另一个自定义NSView

这是它的样子:enter image description here

这里是我如何加载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) 
    } 
} 

回答

0

为什么你不使用约束和视图添加自己的头。太简单了。

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的例子。

我希望这个帮助。

https://github.com/CristianCardosoA/Auto-layout-VF

+1

嘿克里斯蒂安,会与一个NSView这项工作? – Rana

+0

当然,如果你正在开发的NSView是iOS桌面应用程序,如果不使用UIView。这里有几个使用NSView的例子。 http://www.knowstack.com/swift-autolayout-visual-format-language-sample-code/ –