2017-07-06 109 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/ –