0

私の Mountain Lion アプリには、NSTableViewCell を使用する NSTableView を含む NSScrollView が含まれています。リマインダーのように、ScrollView の角を丸くしたかったのです。ここで使用すると言った答えを見つけました:

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

アプリを初めて起動すると、すべてが完全に機能します。リストを下にスクロールして一番下の項目を表示し、アプリを終了します。アプリを再起動すると、リストの上部がスクロール バーの上部と一致するように下に移動します。スクロール バーは、終了時にスクロールした場所を記憶しています。ただし、ウィンドウをスクロールまたはサイズ変更すると、リストが正しく描画されます。リスト項目の 1 つをクリックすると、その位置にある項目が選択されます。

これが終了直前のリストの一番下です

アプリ再起動後の表示はこちら

4

1 に答える 1

0

問題、または少なくとも奇妙な動作を回避する方法を理解しました。

この奇妙な動作は、TableView の項目を部分的に下にスクロールしてすぐに再起動した後、Cocoa アプリを終了した後、NSScrollView 内で NSTableView の行を表示する際に発生しました。Mountain Lion はアプリが部分的に下にスクロールされた状態を記憶しており、リストの上部から下にスライドされたスクロール ノブの上部に TableView の行を描画し始めました。

問題は、ScrollView のレイヤーを表示するように設定していた場所でした。これを使用して、スクロール ビューの角を丸くしました。

私は元々、listScrollView という IBOUTLET を使用して、Document の windowControllerDidLoadNib メソッドで ScrollView の Layer を設定していました。

そのコードを ScrollView の drawRect メソッドに移動しました。

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

Viola、ScrollView の角が丸くなり、ScrollView の角とスクローラー ノブ スロット、および ScrollView の上部と下部にある TableView の行の角がクリップされます。

于 2012-08-30T23:29:59.767 に答える