XCode6 NSSplitViewController保持优先级并且canCollapse无法正常工作

时间:2014-10-31 09:21:22

标签: swift xcode6 autolayout nssplitview

我希望有人可以帮我解决这个问题。

无论我做什么,无论是IB还是代码,我都无法使新的NSSplitViewController及其项目可折叠或保持其优先级。

虽然此视频另有说明,但无法从界面构建器完成: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
}

这些都不起作用。我甚至尝试将这个电话移动到功能底部的超级电话而没有太多运气。

我想知道是否有人确定了解决方案,或者我做错了什么?

1 个答案:

答案 0 :(得分:11)

  • 使NSSplitViewController成为NSSplitView的委托: 例如在IB中连接NSSplitView的代理插座 控制器。 (看起来像这样在IB模板中没有像人们期望的那样自动连接......)
  • 您可以使用IB来更改NSSplitViewItem的保持优先级(例如,一个是249,另一个是250),而不是编码。
  • 在这里,您还可以查看“可以折叠”等。
  • 我还使用IB来设置子视图的最小尺寸限制。

(一个问题:在崩溃之后,我无法用鼠标返回折叠视图;这可能需要实现有效的rect委托方法。更新:折叠时有效的rect不适用,所以我认为使用NSSplitViewItem.collapsed在代码中似乎是解除崩溃的唯一方法。这种行为与'经典'NSSplitView不同......)

此基本设置按预期工作,无需特定编码或覆盖。 (OS X Storyboard App,Swift,Xcode 6.1)