0

我的 Mountain Lion 应用程序包含一个 NSScrollView 和一个使用 NSTableViewCell 的 NSTableView。我希望 ScrollView 具有圆角,例如提醒。我在这里找到了一个说要使用的答案:

[listScrollView setWantsLayer:YES];
[listScrollView.layer setCornerRadius:10.0f];

当我第一次启动应用程序时,一切正常。我向下滚动列表以查看底部的项目并退出应用程序。当我重新启动应用程序时,列表顶部会向下移动以匹配滚动条的顶部,它会记住我退出时滚动到的位置。但是,滚动或调整窗口大小会导致列表正确绘制。如果我单击其中一个列表项,它会选择应该在该位置的项。

这是退出前的列表底部

这是重新启动应用程序后显示的内容

4

1 回答 1

0

我发现了问题,或者至少如何避免这种奇怪的行为。

奇怪的行为是在部分向下滚动 TableView 的项目然后立即重新启动后退出 Cocoa 应用程序后在 NSScrollView 中查看 NSTableView 的行。Mountain Lion 记住了应用程序部分向下滚动的状态,并开始在从列表顶部向下滑动的滚动旋钮顶部绘制 TableView 的行。

问题是我在哪里设置要显示的 ScrollView 层,我用它来为滚动视图创建圆角。

我最初是使用名为 listScrollView 的 IBOUTLET 在 Document 的 windowControllerDidLoadNib 方法中设置 ScrollView 的层。

我将该代码移到 ScrollView 的 drawRect 方法中:

if (!self.wantsLayer) {
    [self setWantsLayer:YES];
    [self.layer setCornerRadius:10.0f];
}

Viola,ScrollView 现在有圆角,它夹住了 ScrollView 的角和滚动旋钮插槽以及 ScrollView 顶部和底部的 TableView 的行角。

于 2012-08-30T23:29:59.767 回答