NSScroller внутри NSScrollView не меняет положение при изменении размера окна (в Swift)

Я создал NSView с Интерфейсным Разработчиком (Xcode 6.1). NSView имеет ограничения для каждого направления. При изменении размера окна с помощью мыши вручную NSView получает новый размер, а NSScroller получает новую позицию на правильной правой границе окна, как и ожидалось.

Когда я устанавливаю размер окна вручную (до того, как он станет видимым) с

myTextView.enclosingScrollView!.window!.setFrame(theRect)

или с

myTextView.window!.setFrame(theRect)

Затем окно хорошо изменяется (как только оно становится видимым), NSTextView также изменяет размеры, но NSScroller (который автоматически является частью NSTextview и не был создан или изменен отдельно) не перемещается, а стоит в середине ScrollView в его старая позиция. Текст, введенный в NSScrollView, использует полный размер и плавает за NSScroller, который соединяется, чтобы стоять над текстом.

В этом случае окно видимо перед установкой размера окна, тогда представление прокрутки усекается с правой или нижней стороны.

Когда я изменяю окно вручную, после определения размера и получения этого поведения, NSScroller переходит в правильное положение, и NSTextView больше не усекается. Таким образом, изменение размера окна вручную делает нечто большее, чем я делаю программно.

Что я должен сделать, чтобы Scroller перемещался с NSView, как изменение размера окна с помощью мыши?

1 ответ

Решение

Обычно это проблема при вызове UI-функций из фонового потока.

Это может быть разрешено при вызове из основного потока или принудительном вызове из основного потока с помощью этой команды:

dispatch_async(dispatch_get_main_queue())
{
    // Place the UI Functions here
}

Пожалуйста, взгляните на: Open File Dialog падает в Swift

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