Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c NSOutlineView:单元格最初太窄_Objective C_Cocoa_Nsoutlineview - Fatal编程技术网

Objective c NSOutlineView:单元格最初太窄

Objective c NSOutlineView:单元格最初太窄,objective-c,cocoa,nsoutlineview,Objective C,Cocoa,Nsoutlineview,我做了一个小演示来隔离我在项目中遇到的一个问题 启动应用程序时,NSOutlineView的单元格对于文本来说太窄: 然后我用鼠标调整窗口大小,使其比NSOutlineView的内容更窄: 当我现在再次放大窗口时,问题就解决了。从现在起,大纲按预期工作: 这是我的AppDelegate的主要方法: - (void)applicationDidFinishLaunching:(NSNotification *)notification { NSRect frame = NSMakeR

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

启动应用程序时,
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];
}

有人能解释一下这种奇怪的行为吗?

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

    outlineColumn.width = SIDEBAR_WIDTH_DEFAULT;

就这样。我花了将近一天的时间才弄明白:(

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

我一直都不知道ady尝试使用
initWithFrame
而不是
init
,滚动视图和大纲视图都有一个合理的大矩形。这没有改变任何东西。我还尝试在将
outlineView.frame添加到滚动视图之前、之后和之后设置
MakeKeyandDerfront
。这没有帮助,任何一个