草庐IT

swift - XCode6 NSSplitViewController 持有优先权和 canCollapse 不工作

coder 2023-09-12 原文

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

无论我做什么,无论是通过 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
}

这些都不起作用。我什至尝试在函数底部移动对 super 的调用,但运气不佳。

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

最佳答案

  • 使 NSSplitViewController 成为 NSSplitView 的委托(delegate): 例如在 IB 中,将 NSSplitView 的委托(delegate)导出连接到它的 Controller 。 (似乎这并没有像人们期望的那样在 IB 模板中自动连接...)
  • 无需编码,您可以使用 IB 更改 NSSplitViewItem 的持有优先级(例如,一个为 249,另一个为 250)。
  • 这里还可以勾选“Can Collapse”等。
  • 我还使用 IB 设置 subview 的最小大小限制。

(一个问题:折叠后,我无法用鼠标恢复折叠 View ;这可能需要实现有效的矩形委托(delegate)方法。更新:折叠时有效矩形不适用,所以我认为使用 NSSplitViewItem.collapsed在代码中似乎是取消折叠的唯一方法。此行为与“经典”NSSplitView 不同...)

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

关于swift - XCode6 NSSplitViewController 持有优先权和 canCollapse 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26671160/

有关swift - XCode6 NSSplitViewController 持有优先权和 canCollapse 不工作的更多相关文章

随机推荐