NSScrolller中的NSScroller在调整窗口大小时不会改变位置(在Swift中)

时间:2014-11-26 15:34:57

标签: window size nstextview nsscrollview nsscroller

我用Interface Builder(Xcode 6.1)创建了一个NSView。 NSView对每个方向都有约束。当用手动鼠标更改窗口大小时,NSView将获得一个新的大小,NSScroller会在窗口的正确右边界处获得一个新位置,如预期的那样。

当我使用

手动设置窗口大小(在显示窗口大小之前)
myTextView.enclosingScrollView!.window!.setFrame(theRect)

myTextView.window!.setFrame(theRect)

然后窗口调整好(一旦它变得可见),NSTextView也会调整大小,但NSScroller(它自动成为NSTextview的一部分,并没有单独创建或修改)不会移动但是站在中间ScrollView处于旧位置。在NSScrollView中输入的文本使用完整大小并浮动在NSScroller后面,NSScroller接缝位于文本的顶部。

在这种情况下,窗口在设置窗口大小之前是可见的,然后滚动视图在右侧或底侧被截断。

当我手动更改窗口时,在设置大小并获得此行为后,NSScroller会跳转到它的正确位置,并且不会截断NSTextView。因此,手动更改窗口大小会执行更多我以编程方式执行的操作。

我必须做什么,Scroller与NSView一起移动,比如用鼠标更改窗口的大小?

1 个答案:

答案 0 :(得分:0)

从后台线程调用UI函数时,这是一个典型的问题。

当从主线程调用或强制主线程使用此命令调用时,它可以解决:

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

请查看:Open File Dialog crashes in Swift