5

我正在玩 NSSplitView - 现在非常成功,但这是我的问题:

我的拆分视图看起来像这样: 拆分视图

在这里测试项目:https ://www.dropbox.com/s/amz863l11nvkdir/TestNSSplitView.zip

我已经实现- (void)splitView:(NSSplitView *)splitView resizeSubviewsWithOldSize:(NSSize)oldSize了在调整大小时将左右子视图保持在与以前相同的大小。

如果我打开包含 NSSplitView 的窗口,控制台中会出现此消息:

<NSSplitView: 0x107de1520>: the delegate <BRSchematicWindowController: 0x10ac11050> was sent -splitView:resizeSubviewsWithOldSize: and left the subview frames in an inconsistent state:
Split view bounds: {{0, 0}, {1068, 600}}
     Subview frame: {{0, 0}, {182, 600}}
     Subview frame: {{183, 0}, {640, 600}}
     Subview frame: {{824, 0}, {243, 600}}
The outer edges of the subview frames are supposed to line up with the split view's bounds' edges. NSSplitView is working around the problem, perhaps at the cost of more redrawing. (This message is only logged once per NSSplitView.)

这里有什么问题?看完这条消息我还是没看懂……

PS:在右侧 splitView 中还有另一个 NSSplitView 这不是失败。即使没有这个额外的 NSSplitView,我也会收到此消息。

4

1 回答 1

8

如果您的目标是 OS X 10.6+,那么使用NSSplitView'ssplitView:shouldAdjustSizeOfSubview:来控制大小要容易得多。

使用此方法的一种方法是将以下IBOutlets 添加到您的 .h 文件中:

@property (nonatomic, weak) IBOutlet NSView *leftView;
@property (nonatomic, weak) IBOutlet NSView *centerView;
@property (nonatomic, weak) IBOutlet NSView *rightView;

然后splitView:shouldAdjustSizeOfSubview:像这样在你的 .m 文件中实现:

- (BOOL)splitView:(NSSplitView *)aSplitView
             shouldAdjustSizeOfSubview:(NSView *)subview {
    return (subview == _centerView);
    // or return !(subview == _leftView || subview == _rightView);
}

通过实现它,您基本上说“仅在调整大小时调整中心子视图的大小”。

你可以暂时注释掉整个splitView:resizeSubviewsWithOldSize:方法,除非你需要以某种方式自定义默认行为。

请注意,如果您有多个拆分视图将此控制器对象设置为它们的委托,您可能需要检查aSplitView参数中传递的拆分视图并相应地执行不同的操作。

于 2013-04-28T22:36:26.370 回答