根据关于NSSplitViewControllers的文档,关联的NSSplitView使用NSSplitViewController作为其委托。特别是在文档中,“拆分视图控制器充当其拆分视图对象(管理分隔符的对象)的委托。如果您覆盖拆分视图委托方法,则必须调用超级。”
我在接口生成器中实现了一个NSSplitViewController,并给了它一个类。但是,从来没有调用过任何splitView委托。此外,如果我只做一些事情,比如吐出splitView委托的NSLog (@"%@",self.splitView.delegate);,结果是"null“。但是,如果我在IB本身(通过将委托出口拖到NSSplitViewController)或内部代码(self.splitView setDelegate:self;)中分配委托,则会得到以下错误:
提出了一个不明确的例外情况。 SplitViewController的splitView无法使用autolayout,因为SplitViewController覆盖不兼容的委托方法。
我完全迷糊了。
发布于 2014-11-18 23:45:03
如果拆分视图的委托实现下列方法之一,则它将与自动布局不兼容。
splitView:constrainMinCoordinate:ofSubviewAt:
splitView:constrainMaxCoordinate:ofSubviewAt:
splitView:resizeSubviewsWithOldSize:
splitView:shouldAdjustSizeOfSubview:https://developer.apple.com/library/mac/releasenotes/AppKit/RN-AppKitOlderNotes/#10_8AutoLayout
而且由于NSSplitViewController需要使用自动布局(在文档中提到),所以这些方法与NSSplitViewController不兼容,不应该在子类中实现。
发布于 2020-06-06 17:33:37
延伸到泰勒的回答上。
在macOS 10.8中,苹果对NSSplitview进行了改进,包括尊重子视图的约束。苹果还引入了优先考虑NSSplitview的子视图。保持优先级是保持子视图大小的优先级,因此在调整splitview大小时,优先级最低的子视图将首先调整大小。
因此,要控制调整大小的行为,您必须调优SplitView项的保持优先级。这也可以直接在故事板中完成。
https://stackoverflow.com/questions/26982714
复制相似问题