прокрутка NSTextView оставляет полосу прокрутки в неправильном положении - PullRequest
4 голосов
/ 10 ноября 2011

У меня есть NSTextView внутри NSScrollView.Я помещаю текст в NSTextView и прокручиваю его до конца программно, что работает нормально, но полоса прокрутки остается наверху.Использование мыши для позиционирования полосы прокрутки заставляет ее прыгать вниз, туда, где она принадлежит, и с этого момента она работает нормально.

Мой код:

textView.string = s;
[textView scrollToEndOfDocument:self];

Не зацикливайтесьна метод scrollToEndOfDocument - я также попытался:

[textView scrollRangeToVisible:NSMakeRange(s.length, 0)];

и:

[[scrollViewText contentView] scrollToPoint:NSMakePoint(0, textView.frame.size.height)];
[scrollViewText reflectScrolledClipView:[scrollViewText contentView]];

с точно такой же проблемой, показанной здесь:

Scroll bar in wrong position.

Я исправил проблему, добавив одну строку:

textView.string = s;
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate distantPast]];
[textView scrollToEndOfDocument:self];

В этом вызове runUntilDate не должно быть необходимости.Моя теория состоит в том, что это дает NSScrollView шанс догнать и синхронизировать себя, так или иначе.

Это все на Lion.Я попробовал это с Системными настройками, установленными как на «левую» прокрутку Льва, так и на традиционную прокрутку до Льва, с одинаковыми результатами.

Любые идеи о:

  1. Почему этоЗвонок, который я добавил, помог, и
  2. Как заставить его работать без этого звонка?

1 Ответ

3 голосов
/ 11 ноября 2011

Попробуйте NSScrollView's reflectScrolledClipView:

Редактировать: Как насчет замены [[scrollViewText contentView] scrollToPoint:NSMakePoint(0, textView.frame.size.height)];

с

[scrollView.contentView scrollToPoint:NSMakePoint(0, scrollView.documentView.frame.size.height-scrollView.contentSize.height)];

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

...