1

我做了一个小演示来隔离我在项目中遇到的问题。

当我启动应用程序时,单元格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];
}

谁能解释一下这种奇怪的行为?

4

2 回答 2

0

我不知道这是否是最优雅的解决方案,但至少它有效。我在创建后添加了以下单行NSTableColumn

    outlineColumn.width = SIDEBAR_WIDTH_DEFAULT;

就是这样。我花了将近一天的时间才弄清楚:(

于 2012-08-21T19:10:51.760 回答
0

上面的答案对我来说不够干净,所以我继续玩。现在我很高兴:我在滚动视图中添加了一个监听器,它将大纲视图的宽度调整为与滚动视图相同。不再需要提前设置大纲栏的宽度。如果事先不知道宽度,这很重要。

于 2012-08-23T05:56:17.600 回答