У меня есть 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]];
с точно такой же проблемой, показанной здесь:
Я исправил проблему, добавив одну строку:
textView.string = s;
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate distantPast]];
[textView scrollToEndOfDocument:self];
В этом вызове runUntilDate не должно быть необходимости.Моя теория состоит в том, что это дает NSScrollView шанс догнать и синхронизировать себя, так или иначе.
Это все на Lion.Я попробовал это с Системными настройками, установленными как на «левую» прокрутку Льва, так и на традиционную прокрутку до Льва, с одинаковыми результатами.
Любые идеи о:
- Почему этоЗвонок, который я добавил, помог, и
- Как заставить его работать без этого звонка?