Отключить начальную анимацию изменения размера для NSScrollView, содержащего NSOutlineView с динамической высотой строки - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть NSScrollview, содержащий NSOutlineView (NSTableView тоже должен быть актуален) с включенной автоматической высотой строк. Каждая строка содержит NSTextField, который может быть многострочным, в зависимости от ширины столбца и длины его текста. При настройке NSOutlineView я хочу показать выбранную строку, выделив ее и прокручивая, чтобы сделать ее видимой.

Autolayout работает корректно, однако (как упоминалось в https://developer.apple.com/library/archive/releasenotes/AppKit/RN-AppKit/#10_13NSTableView%20Automatic%20Row%20Heights) начальная высота представления контура определяется значением статической высоты или методом делегата heightOfRow. Таким образом, контурный вид оценивает свой предпочтительный размер дважды за короткий период с разными значениями: сначала по высоте, а затем по автопоставке. (Я пытался заставить делегата возвращать то же значение высоты, что и для автоматического размещения, но безуспешно.)

Однако, несмотря на то, что правильный размер определяется быстро (так как нет видимых признаков изменения размера строки), NSScrollView, кажется, оживляет это изменение размера в течение нескольких секунд, что можно рассматривать как видимое сокращение вертикальной прокрутки. Кроме того, эта анимация мешает прокрутке к выбранной строке, что приводит к анимации с перескоком прокрутки и, иногда, к неправильной конечной позиции (при этом выбранная строка находится за пределами видимой области).

Итак, есть ли способ (временно) отключить анимацию прокрутки изменения размера или, может быть, любой другой метод для решения этой проблемы?

...