NSTextView внутри NSScrollView не прокручивается :( - PullRequest
5 голосов
/ 25 августа 2010

У меня есть следующий код в автономном тестовом приложении Какао:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    NSView *contentView = [window contentView];

    NSTextStorage *textStorage = [NSTextStorage new];
    NSLayoutManager *layoutManager = [NSLayoutManager new];
    NSTextContainer *textContainer = [NSTextContainer new];

    [textContainer setHeightTracksTextView:YES];
    [textContainer setWidthTracksTextView:YES];
    [textStorage addLayoutManager:layoutManager];
    [layoutManager addTextContainer:textContainer];

    NSScrollView *scrollView = [[NSScrollView alloc] initWithFrame:[contentView bounds]];
    [scrollView setHasVerticalScroller:YES];
    [scrollView setAutoresizingMask:NSViewWidthSizable|NSViewHeightSizable];
    [scrollView setBorderType:NSNoBorder];

    NSRect textFrame;
    textFrame.origin = NSZeroPoint;
    textFrame.size = [NSScrollView contentSizeForFrameSize:[scrollView frame].size hasHorizontalScroller:NO hasVerticalScroller:YES borderType:NSNoBorder];

    NSTextView *textView = [[[NSTextView alloc] initWithFrame:textFrame textContainer:textContainer] autorelease];
    [textView setAutoresizingMask:NSViewWidthSizable];

    [scrollView setDocumentView:textView];

    [contentView addSubview:scrollView];
}

Я пытаюсь настроить всю иерархию задействованных объектов (включая объекты текстовой системы) в комбинации NSTextView + NSScrollView, чтобы посмотреть, как все это работает вместе. Однако, когда я запускаю это и начинаю добавлять несколько строк в текстовое представление, оно не прокручивается, когда текст становится длиннее, чем представление. Это как если бы NSScrollView и NSTextView не знали друг о друге. Какие соединения мне не хватает, чтобы все здесь было правильно общаться?

РЕДАКТИРОВАТЬ : Да, это дырявый и уродливый. :) Это было написано просто для того, чтобы попытаться определить, что здесь происходит, а не рабочий код или что-то, что я буду использовать напрямую когда-либо снова. Promise.

1 Ответ

5 голосов
/ 25 августа 2010

Вы пытались играть с -setHorizontallyResizable: и -setVerticallyResizable: ?

...