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

それが最もエレガントなソリューションかどうかはわかりませんが、少なくとも機能します。を作成した後、次の 1 行を追加しましたNSTableColumn

    outlineColumn.width = SIDEBAR_WIDTH_DEFAULT;

それでおしまい。理解するのにほぼ1日かかりました:(

于 2012-08-21T19:10:51.760 に答える
0

上記の答えは私にとって十分にきれいではなかったので、いじり続けました。これで満足です。アウトライン ビューの幅をスクロール ビューと同じになるようにサイズ変更するリスナーをスクロール ビューに追加しました。アウトライン列の幅を事前に設定する必要はもうありません。幅が事前にわからない場合、これは重要です。

于 2012-08-23T05:56:17.600 に答える