0

我用 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 会跳到正确的位置,并且 NSTextView 不再被截断。因此,手动更改窗口大小比我以编程方式做的更多。

我必须怎么做,Scroller 会随着 NSView 移动,比如用鼠标改变窗口的大小?

4

1 回答 1

0

This is a typically problem when calling UI-functions from a background thread.

It can besolved, when calling from main-thread or forcing to called by the main-thread with this command:

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

Please have a look at: Open File Dialog crashes in Swift

于 2015-01-18T12:09:49.953 回答