我正在玩NSSplitView-到目前为止非常成功,但这是我的问题:

我的SplitView看起来像这样:

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

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

如果我打开包含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,我也会收到此消息。

最佳答案

如果您的目标是OS X 10.6+,则使用NSSplitView splitView:shouldAdjustSizeOfSubview: 控制大小要容易得多。

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

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

然后像这样在您的.m文件中实现splitView:shouldAdjustSizeOfSubview::
- (BOOL)splitView:(NSSplitView *)aSplitView
             shouldAdjustSizeOfSubview:(NSView *)subview {
    return (subview == _centerView);
    // or return !(subview == _leftView || subview == _rightView);
}

通过实现这一点,您基本上可以说“调整大小时仅调整中心 subview 的大小”。

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

请注意,如果您有多个拆分 View ,并将此 Controller 对象设置为其委托(delegate),则可能需要检查以查看aSplitView参数中传递了哪个拆分 View ,并相应地执行其他操作。

关于objective-c - NSSplitView的状态不一致,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16267363/

10-13 04:05