Мой NSScrollView не прокручивает мой NSTextView (документ) - PullRequest
0 голосов
/ 05 февраля 2020

Так что я был сожжен этим несколько раз. Я пытаюсь создать NSTextView, который можно прокручивать.

Единственный способ заставить его работать - это иметь Xib, но сейчас он перестал работать после того, как я добавил Stack View в соседний Разделенное представление для "Бог знает в чем причина".

Так, что я сделал?

У меня есть код для кода, скопированного в Apple Docs, как для текста в представлении прокрутки вот так:

// https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/TextUILayer/Tasks/TextInScrollView.html
BOOL deviateFromAppleScrollDoc = NO;

_scrollView = [[NSScrollView alloc]
            initWithFrame:[[self view] frame]];
            // Apple Has
            // [[theWindow contentView] frame]];
            // but we are in a sub-View-Controller

NSSize contentSize = [_scrollView contentSize];

[_scrollView setBorderType:NSNoBorder];
[_scrollView setHasVerticalScroller:YES];
[_scrollView setHasHorizontalScroller:NO];
[_scrollView setAutoresizingMask:NSViewWidthSizable |
            NSViewHeightSizable];

_editorView = [[EditorView alloc]
                initWithFrame:NSMakeRect(
                    0, 0,
                    contentSize.width, contentSize.height)];

[_editorView setMinSize:NSMakeSize(0.0, contentSize.height)];
[_editorView setMaxSize:NSMakeSize(FLT_MAX, FLT_MAX)];
[_editorView setVerticallyResizable:YES];
[_editorView setHorizontallyResizable:NO];

if (deviateFromAppleScrollDoc)
{
    [_editorView setAutoresizesSubviews:YES];
    [_editorView setAutoresizingMask:NSViewWidthSizable|NSViewHeightSizable];
}
else
{
    [_editorView setAutoresizingMask:NSViewWidthSizable];
}


[[_editorView textContainer]
            setContainerSize:NSMakeSize(contentSize.width, FLT_MAX)];
[[_editorView textContainer] setWidthTracksTextView:YES];
if (deviateFromAppleScrollDoc)
{
     [[_editorView textContainer] setHeightTracksTextView:YES];
}

if (deviateFromAppleScrollDoc)
{
    NSClipView *clipView = [[NSClipView alloc] init];
    [clipView setDocumentView:_editorView];
    [_scrollView setContentView:clipView];
}
else
{
    [_scrollView setDocumentView:_editorView];
}

[[self view] addSubview:_scrollView];

Что это мне дает?

Halfway Scroll Description

Как вы можете сказать, существует NSTextView. Он не заполняет контейнер так, как мне бы хотелось.

Существует также представление прокрутки, и я могу сказать, что оно активно. Вы можете потянуть вниз и получить эффект отскока, но он не прокручивает документ так, как мне бы хотелось. Этот текст обрезается в середине предложения, и когда я добавляю к нему, представление не прокручивается при наборе текста, и даже если я прокручиваю, я не могу добраться до него.

Представление прокрутки "застряло" .

Я могу сделать так, чтобы оно заполняло все окно, если я изменил маску автоматического изменения размера на NSViewHeightSizable примерно так:

[_editorView setAutoresizingMask:NSViewWidthSizable|NSViewHeightSizable];

См. Здесь:

Text View that fills the Rect

К сожалению, он по-прежнему не прокручивается, а «Вид прокрутки» все еще «застрял».

Я не знаю, что изменить.

Я попытался добавить «NSClipView» и установить вместо этого «Представление содержимого» следующим образом:

    NSClipView *clipView = [[NSClipView alloc] init];
    [clipView setDocumentView:_editorView];
    [_scrollView setContentView:clipView];

Это также не работает.

Более того, оно делает что-то напуганное с шириной и некоторые буквы обрезаются. Неприемлимо. Решений пока нет.

The NSClipView iteration

Что мне не хватает?

Что мне нужно попробовать / установить / сделать?

Спасибо!

ОБНОВЛЕНИЕ:

Просмотр прокрутки выполняет прокрутку документа, когда я активирую меню поиска в NSTextView.

Все еще мистифицированный.

См. здесь:

Scroll view scrolls when find bar is active

...