2014-10-31 72 views
2

我希望有人能帮助我解决这个问题。无论我做什么,无论是通过IB还是在代码中,我都无法使新的NSSplitViewController及其项目可折叠或保持其优先级。XCode6 NSSplitViewController控制优先级和canCollapse不起作用

它不能从界面生成器做虽然这种视频显示其他内容:https://www.youtube.com/watch?v=ZIIuPo4F6tQ

我只能让SPLITVIEW项目在代码最小宽度但是这是相当多了。我没有运气测试Swift和Objective-C实现。

这是我写的SWIFT:

override func viewDidLoad() { 
    super.viewDidLoad() 

    // --- 

    var left: NSSplitViewItem = self.splitViewItems[0] as NSSplitViewItem 
    var right: NSSplitViewItem = self.splitViewItems[1] as NSSplitViewItem 

    // --- 

    // NOTE: these are not working properly in the interface builder for now 

    self.view.addConstraint(NSLayoutConstraint(
     item: left.viewController.view, 
     attribute: NSLayoutAttribute.Width, 
     relatedBy: NSLayoutRelation.GreaterThanOrEqual, 
     toItem: nil, 
     attribute: NSLayoutAttribute.NotAnAttribute, 
     multiplier: 0, 
     constant: 200 
    )) 

    self.view.addConstraint(NSLayoutConstraint(
     item: right.viewController.view, 
     attribute: NSLayoutAttribute.Width, 
     relatedBy: NSLayoutRelation.GreaterThanOrEqual, 
     toItem: nil, 
     attribute: NSLayoutAttribute.NotAnAttribute, 
     multiplier: 0, 
     constant: 200 
    )) 

    // --- 

    // NOTE: these are not working in the interface builder neither here but set anyway to demonstrate the problem 

    left.canCollapse = true // has no effect 
    right.canCollapse = true // has no effect 

    // --- 

    // NOTE: this is not working in the interface builder neither here but set anyway to demonstrate the problem 

    right.holdingPriority = 1.0 // has no effect 
} 

这一切都不在所有工作。我甚至试图把这个调用转移到函数底部的超级,但没有多少运气。

我想知道是否有人发现了一个解决方案,或者我正在做一些完全错误的事情?

+0

呃,我认为乘数应该是1,而不是0. – 2014-12-26 16:28:58

回答

11
  • 充分利用NSSplitViewController的委托NSSplitView的: 例如在IB中,将NSSplitView的代理插座连接到其控制器 。 (看起来像这样没有在IB模板中自动连接,因为人们会期望...)
  • 而不是编码,你可以使用IB来改变NSSplitViewItem的持有优先级(例如,一个是249和另一个250)。
  • 在这里,您还可以检查“Can Collapse”等。
  • 我还使用IB来设置子视图的最小尺寸约束。

(一个问题:折叠后,我无法用鼠标取回折叠视图;这可能需要实施有效的矩形代表方法。更新:折叠时不应用有效直角坐标,所以我认为使用NSSplitViewItem.collapsed在代码似乎是唯一的方式来un-collapse。这种行为是不同的'经典'NSSplitView ...)

这个基本的设置按预期工作,没有特定的编码或重写。 (OS X故事板应用程序,Swift,Xcode 6.1)

+1

我还必须添加NSSplitView作为NSSplitViewController的视图插座。 – Rhuantavan 2014-12-21 15:50:54

+0

我很想知道如何在子视图上设置最小尺寸。我有一个TableView作为第一个拆分 - 所以顶部视图是滚动视图 - IB不会让我设置一个自动布局约束在该拆分的任何视图... – 2014-12-26 15:27:48

+0

谢谢!你们是否知道雷达是否已被提交?基本上,NSSplitViewController在Interface Builder中被破坏。 – 2014-12-30 14:08:57