6

我有一段时间设置一个简单的拆分视图。第一个拆分视图已折叠。我需要为它设置一个最小宽度。我在网上看到的所有东西(NSSplitViewController/NSSplitView 很少见)都是用于 Objective-C 的,将所有东西都放在应用程序委托中,并使用 XIB。

场景如下:窗口控制器与 SplitView 控制器有一个 segue,它有两个拆分视图(2 个视图控制器)。

哪个对象需要有 NSSplitViewDelegate?

编辑:添加代码片段: 例如,我有这个:

import Cocoa

class ViewController: NSSplitViewController, NSSplitViewDelegate {


    @IBOutlet weak var pdlSplitView: NSSplitView!

    override func viewDidLoad() {
        super.viewDidLoad()

        }
    override func splitView(splitView: NSSplitView, constrainMinCoordinate proposedMinimumPosition: CGFloat, ofSubviewAt dividerIndex: Int) -> CGFloat {
        return proposedMinimumPosition + 200
    }

}

还有更多我想念的吗?

谢谢

更新

根据下面的评论,我进行了更改,但现在我在 AppDelegate 的类定义上获得了 sigAbort。完整代码

视图控制器:

import Cocoa

class ViewController: NSSplitViewController, NSSplitViewDelegate {


    @IBOutlet weak var pdlSplitView: NSSplitView!

    let publicDataListings : PDL = PDL()


    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
        self.pdlSplitView.delegate = self

    }

    override func splitView(splitView: NSSplitView, constrainMinCoordinate proposedMinimumPosition: CGFloat, ofSubviewAt dividerIndex: Int) -> CGFloat {
    return proposedMinimumPosition + 200
    }

}

侧边栏视图控制器:

import Cocoa

class SidebarViewController: NSViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do view setup here.
    }


}

数据集视图控制器:

import Cocoa

class DatasetViewController: NSViewController, NSSplitViewDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do view setup here.
    }

}

更新 我拿走了我的自定义 NSSplitViewController 类并创建了两个 NSSplitView 类,一个使用约束方法。现在,我看到了两个子视图,但它们比它们应该的要小得多:

在此处输入图像描述

有没有用 Swift 和 Storyboards 做到这一点?

4

3 回答 3

22

无需编码即可在具有自动布局的故事板中为 NSSplitViewController/NSSplitView 设置最小宽度。

选择您需要最小宽度的 CustomView(例如 200),并添加一个设置为所需值的宽度约束,这将添加一个“相等”约束(例如 Custom View.Width 等于 200)。

接下来找到新的约束并将约束关系更改为“大于或等于”(例如,您现在的宽度≥200)。

您现在在 NSSplitView 中有一个最小宽度。然后,您可以使用 Priority 字段来解决与任何其他自动布局约束的任何冲突。

于 2016-01-03T02:26:26.017 回答
0

这些值没有在情节提要中公开,这很遗憾,但是 NSSplitViewItem 具有可以使用的 minimumThickness 和 maximumThickness 属性。(这会覆盖持有优先级,因此如果您为一个 splitViewItem 设置 minimumThickness,如果您使窗口足够小,其他的现在将缩小为空。)

还有automaticMaximumThickness(我无法弄清楚它如何与其他值相互作用)和preferredThicknessFraction,当我在10.13下使用它时没有效果。

于 2020-07-15T21:56:10.427 回答
-2
  1. 将 NSSplitViewController 设置为 NSSplitView 的委托(您要约束的拆分视图)。在您的情况下,它应该是 - 在 xib 中将 NSSplitView 的委托出口挂钩到文件所有者(我猜文件所有者是 NSSplitViewController 子类)
  2. 实施

    - (CGFloat)splitView:(NSSplitView *)splitView constrainMinCoordinate:(CGFloat)proposedMin ofSubviewAt:(NSInteger)dividerIndex { ... }
    

在 NSSplitViewController

https://developer.apple.com/library/mac/documentation/Cocoa/Reference/NSSplitViewDelegate_Protocol/index.html#//apple_ref/occ/intfm/NSSplitViewDelegate/splitView:constrainMinCoordinate:ofSubviewAt

于 2015-01-17T17:20:00.740 回答