6

根据 NSSplitViewControllers 上的文档,关联的 NSSplitView 使用 NSSplitViewController 作为其委托。特别是在文档中,“拆分视图控制器充当其拆分视图对象(管理分隔符的对象)的委托。如果您覆盖拆分视图委托方法,您的覆盖必须调用 super。”

我在界面生成器中实现了一个 NSSplitViewController 并给了它一个类。但是,从未调用过任何 splitView 委托。此外,如果我只是做一些类似吐谁 splitView 委托 [ NSLog (@"%@", self.splitView.delegate); ],结果为“空”。但是,如果我在 IB 本身(通过将委托出口拖到 NSSplitViewController)或内部代码([self.splitView setDelegate:self];)分配委托,我会收到以下错误:

引发了未捕获的异常
SplitViewController 的 splitView 无法使用自动布局,因为 SplitViewController 覆盖了不兼容的委托方法。

我完全糊涂了。

4

2 回答 2

20

如果拆分视图的委托实现了以下方法之一,它将与自动布局不兼容。

splitView:constrainMinCoordinate:ofSubviewAt:
splitView:constrainMaxCoordinate:ofSubviewAt:
splitView:resizeSubviewsWithOldSize:
splitView:shouldAdjustSizeOfSubview:

https://developer.apple.com/library/mac/releasenotes/AppKit/RN-AppKitOlderNotes/#10_8AutoLayout


并且由于 NSSplitViewController 需要使用自动布局(文档中提到),这些方法与 NSSplitViewController 不兼容,不应该在子类中实现。

于 2014-11-18T23:45:03.917 回答
0

扩展泰勒的答案。

在 macOS 10.8 中,Apple 对 NSSplitview 进行了改进,其中包括尊重子视图的约束。苹果还为 NSSplitview 的子视图引入了持有优先权。Hold Priority是保持子视图大小的优先级,所以在调整splitview大小时,优先级最低的子视图会先调整大小。

因此,要控制调整大小的行为,您必须调整 SplitView 项目的持有优先级。这也可以直接在情节提要中完成

于 2020-06-06T17:33:37.283 回答