Заполнение вокруг NSTextView в NSScrollView

Я хотел бы предоставить несколько пикселей заполнения вокруг NSTextView внутри NSScrollView. Я просмотрел этот пост, и использование setTextContainerInset делает трюк для левое, правое и нижнее поля. Но как только текст прокручивается, верхний буфер теряется. То же самое с переопределением textContainerOrigin. В другом ответе в этом сообщении говорится:

То, как это делает TextEdit (в режиме Wrap to Page), состоит в том, чтобы поместить текстовое представление в более крупное представление и установить это более крупное представление в качестве представления документа в представлении прокрутки.

Но если я это сделаю (используя, скажем, NSBox), содержимое больше не прокручивается. Я что-то упустил в этом конкретном трюке, или есть какие-то другие методы, которые люди могли бы предложить?


person stdout    schedule 24.08.2010    source источник
comment
Я хотел бы сделать наоборот - удалить отступы, которые есть у NSTextView.   -  person adib    schedule 12.11.2012


Ответы (2)


Кажется, в вашей цитате отсутствует шаг. Вам нужно убедиться, что ваш новый вид документа отслеживает изменения во фрейме текстового представления и подгоняет размер под себя. Вы можете включить NSViewFrameDidChangeNotification в текстовом представлении с помощью -setPostsFrameChangedNotifications:, затем ваш новый вид документа будет прослушивать уведомления из текстового представления.

person Joshua Nozzi    schedule 24.08.2010
comment
Спасибо за быстрый ответ. Но как только я получил NSViewFrameDidChangeNotification, сообщающий мне, что внутреннее текстовое представление хочет прокручиваться, как мне сообщить внешнему представлению прокрутки? - person stdout; 25.08.2010
comment
Используйте NSTextView -scrollRangeToVisible: (унаследовано от NSText) и передайте -selectedRange текстового представления (который может включать точку вставки нулевой длины). - person Joshua Nozzi; 25.08.2010
comment
Еще раз спасибо за постоянные ответы, но если я использую scrollRangeToVisible (в самом внутреннем текстовом представлении, где на самом деле находится мой текст), похоже, ничего не происходит. Я использую: r = NSMakeRange ([[textView string] length], 0); [textView scrollRangeToVisible: r]; Но я думаю, что здесь мне не хватает чего-то более фундаментального. С NSBox между моим представлением прокрутки и моим текстовым представлением не будет ли нарушена вся связь между ними? например как ScrollView узнает, когда появится вертикальная полоса прокрутки? И когда я использую скроллер, как текстовое представление узнает, что ему нужно прокручивать? И так далее. - person stdout; 27.08.2010
comment
Прочтите мой комментарий еще раз. Вы хотите передать выбранный диапазон текстового представления, а не диапазон, охватывающий весь текст. Что касается того, как представление прокрутки определяет, как работать, это подробно описано в концептуальной документации. - person Joshua Nozzi; 28.08.2010
comment
Спасибо, я пропустил это. Но, оказывается, наша настоящая проблема заключалась в том, что я не изменял размер NSBox вручную (как вы также сказали). Как только я это сделал, полоса прокрутки работает как надо. Моя большая проблема сейчас заключается в том, чтобы определить правильный размер NSBox. Я подумал, что NSBox sizetoFit: поможет, и иногда это работает для прокрутки первой строки. Затем он быстро отключается, при этом нижний ряд символов находится наполовину за пределами окна, а буфер вверху отсутствует. Если у вас есть какие-либо предложения здесь или вы можете указать мне на какую-то документацию, которую я должен прочитать, я был бы признателен. - person stdout; 01.09.2010

Между прочим, в итоге я добился этого, создав подкласс NSClipView, переопределив setFrame:, setFrameOrigin: и setFrameSize и взломав исходную точку и ширину в этих методах, чтобы добавить свои отступы.

person stdout    schedule 22.11.2010