Убедитесь, что NSTrackingArea обновлен во вложенных NSScrollViews

У меня есть NSCollectionView в NSScrollView. Представление прокрутки прокручивается горизонтально, чтобы перемещаться вдоль линии элементов. Внутри каждого элемента коллекции находится NSOutlineView с вертикальной прокруткой.

У меня есть объекты NSButton для открытия и закрытия элементов коллекции - как дополнительные представления в моей коллекции. На этих кнопках я настроил NSTrackingAreas для поддержки эффектов наведения мыши.

Это работает правильно, пока я не прокручиваю, и в этот момент области NSTrackingArea явно остаются позади (эффекты наведения мыши происходят, когда мышь находится там, где была кнопка, а не там, где она есть).

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

Я пытался использовать.inVisibleRect при настройке областей отслеживания, а не перестраивать их явно, но это не улучшает обновление отслеживания.

Я пытался вызвать updateTrackingAreas в NSCollectionView, когда происходит прокрутка, но он никогда не передается дочерним представлениям, как я ожидал.

В качестве примечания, в моей коллекции также есть NSTextViews с подсказками, которые также очень ненадежны. Их часто оставляют висеть. Указатели курсора руки над ссылками часто смещены.

Такое ощущение, что по умолчанию updateTrackingArea чрезмерно оптимизирован и вызывается не так часто, как следовало бы.

Итак, я собираюсь приступить к созданию собственного трекера области отслеживания для регистрации и обновления моих представлений, когда они не обновляются по умолчанию...

... но может кто-то увидит что-то очевидное, что мне не хватает? Спасибо.

1 ответ

Решение

Настройка области отслеживания может быть слегка нарушена при неправильном вложении видов прокрутки. См. Ответы о вложенности прокрутки здесь для деталей:

NSScrollView внутри другого NSScrollView

Другие вопросы по тегам