tun*_*una 4 xcode cocoa objective-c nssplitview
我正在玩NSSplitView - 现在非常成功,但这是我的问题:
我的SplitView看起来像这样:

测试项目: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.)
Run Code Online (Sandbox Code Playgroud)
这有什么不对?看完这条消息后我才明白...
PS:在正确的splitView中有另一个NSSplitView,这不是失败.即使没有这个额外的NSSplitView,我也会收到此消息.
如果你的目标OS X 10.6以上,那么它更容易使用NSSplitView的splitView:shouldAdjustSizeOfSubview:控制上浆.
使用此方法的一种方法是将以下IBOutlets 添加到.h文件中:
@property (nonatomic, weak) IBOutlet NSView *leftView;
@property (nonatomic, weak) IBOutlet NSView *centerView;
@property (nonatomic, weak) IBOutlet NSView *rightView;
Run Code Online (Sandbox Code Playgroud)
然后splitView:shouldAdjustSizeOfSubview:在你的.m文件中实现如下:
- (BOOL)splitView:(NSSplitView *)aSplitView
shouldAdjustSizeOfSubview:(NSView *)subview {
return (subview == _centerView);
// or return !(subview == _leftView || subview == _rightView);
}
Run Code Online (Sandbox Code Playgroud)
通过实现它,你基本上说"调整大小时只调整中心子视图的大小".
您可以splitView:resizeSubviewsWithOldSize:暂时注释掉整个方法,除非您需要以某种方式自定义默认行为.
请注意,如果您有多个拆分视图将此控制器对象设置为其委托,您可能需要检查以查看aSplitView参数中传递的拆分视图并相应地执行不同的操作.
| 归档时间: |
|
| 查看次数: |
1034 次 |
| 最近记录: |