我做了一个小小的演示,以隔离我在项目中遇到的问题。
当我启动应用程序时,NSOutlineView
的单元格对于文本来说太窄了:
然后我用鼠标调整窗口大小,使其比NSOutlineView
的内容更窄:
当我现在再次放大窗户时,问题就解决了。从现在开始,大纲按预期工作:
这是我的AppDelegate的主要方法:
- (void)applicationDidFinishLaunching:(NSNotification *)notification {
NSRect frame = NSMakeRect(0., 0., 400., 300.);
NSUInteger styleMask = NSTitledWindowMask | NSClosableWindowMask | NSResizableWindowMask;
_mainWindow = [[NSWindow alloc] initWithContentRect:frame styleMask:styleMask backing:NSBackingStoreBuffered defer:NO];
_mainWindow.title = @"Outline";
NSScrollView *leftScrollView = [[NSScrollView alloc] init];
leftScrollView.hasVerticalScroller = YES;
leftScrollView.hasHorizontalScroller = NO;
leftScrollView.drawsBackground = NO;
leftScrollView.autoresizingMask = NSViewWidthSizable | NSViewHeightSizable;
_mainWindow.contentView = leftScrollView;
NSOutlineView *outlineView = [[NSOutlineView alloc] init];
NSTableColumn *outlineColumn = [[NSTableColumn alloc] initWithIdentifier:@"Menu Item"];
[outlineView addTableColumn:outlineColumn];
outlineView.outlineTableColumn = outlineColumn;
outlineView.selectionHighlightStyle = NSTableViewSelectionHighlightStyleSourceList;
outlineView.autoresizingMask = NSViewWidthSizable | NSViewHeightSizable;
outlineView.headerView = nil;
_outlineDataSourceAndDelegate = [[MROutlineDataSourceAndDelegate alloc] init];
outlineView.dataSource = _outlineDataSourceAndDelegate;
outlineView.delegate = _outlineDataSourceAndDelegate;
leftScrollView.documentView = outlineView;
[_mainWindow makeKeyAndOrderFront:NSApp];
}
有人可以解释这种奇怪的行为吗?
答案 0 :(得分:0)
我不知道这是否是最优雅的解决方案,但至少它是有效的。我在创建NSTableColumn
后添加了以下单行:
outlineColumn.width = SIDEBAR_WIDTH_DEFAULT;
就是这样。花了我差不多一天才弄明白:(
答案 1 :(得分:0)
上面的答案对我来说不够干净,所以我继续玩。现在我很高兴:我在滚动视图中添加了一个监听器,它将大纲视图的宽度调整为与滚动视图相同。不再需要提前设置轮廓列的宽度。如果事先不知道宽度,这很重要。