2012-01-17 4 views
4

次の問題があります。サブクラス化されたNSScrollViewにはNSTableViewベースのビューがあります。私は-drawRectでscrollviewにカスタム背景を追加しました:サブクラスのメソッド、そして今私はこのような内部テーブルビューの周りにいくつかの「パディング」を追加したいと思います:NSTableViewのパディング

example http://img.skitch.com/20120117-ktd9g5wy8u9cm37jeebjjxx61u.png

私はどのように実装することができますこの?

答えて

2

最後に、私はこの問題を解決しました。私は私のカスタムNSClipViewを作成しました

NSTableView *docView = (NSTableView *)self.scrollView.documentView; 
id newClipView = [[CustomClipView alloc] initWithFrame:[self.scrollView.contentView frame]]; 
[self.scrollView setContentView:(NSClipView *)newClipView]; 
[newClipView setDrawsBackground:NO]; 

NSView *documentContentView = [[NSView alloc] initWithFrame:docView.bounds]; 
docView.autoresizingMask = NSViewWidthSizable | NSViewHeightSizable; 
[documentContentView addSubview:docView]; 
[self.scrollView setDocumentView:documentContentView]; 
[self.scrollView setDrawsBackground:NO]; 

と呼ばれる:私はNSViewの(のはそれdocumentContentViewを呼びましょう)を作成しました、このdocumentContentViewのサブビューとしての私のNSTableViewを追加し、その後、私はscrollviewのdocumentViewにdocumentContentViewを追加しましたCustomClipView(この記事に基づいてhttp://www.cocoadev.com/index.pl?CenteringInsideNSScrollView)、このサブクラスは、ウィンドウのサイズが変更されたときにdocumentContentViewの起点を設定します。私は同様にサブテーブルをサブクラス化しました。-reloadDataメソッドでは、tableviewの内容を変更するときにdocumentContentViewのサイズを変更できます。

1

まず、drawRect:に背景を追加しないでください。サブクラス化する場合はinitWithFrame:に追加するか、呼び出し側から変更してください。

埋め込みは簡単です。NSTableViewframeを小さくし、0,0にならないようにします。

+0

を使用することができます。私はサブクラス化されたテーブルビューのフレームメソッドを上書きしました: - (NSRect)フレーム { NSRect aFrame = [スーパーフレーム]; NSRect newFrame = NSMakeRect(0、0、aFrame.size.width + 20、aFrame.size.height + 20); newFrame.origin.x = -10; newFrame.origin.y = -10; return newFrame; } これはほとんどうまくいきますが、テーブルの右側がスクロールビューに表示されず、スクロールビューが正しく変更できないようです。下半分の行が表示領域外にある場合右のスクロールは自動的に表示されません。 – vbali

+0

私はこのことについて今、あなたに詳細に説明する時間はありませんが、 'UIScrollView.contentSize'を調べて、scrollViewにコンテンツの大きさを伝えてください。また、あなたのnewFrameでは、サイズは+20ではなく-20でなければなりません。通常、 'NSTableView'は必要に応じてそれ自身でスクロールします(ドキュメントではUIScrollViewのサブクラスであることがわかります)。特別なことを望まない場合は、scrollViewにラップする必要はありません。 – fzwo

+0

残念ながら、NSScrollViewのcontentSizeは読み取り専用プロパティです。私はNSScrollViewのサブクラスの-contentSizeアクセサを上書きし、そのdocumentViewのframe.sizeを返しますが、動作しません:(NSScrollView、NSTableView、NSClipViewのドキュメント全体を読みましたが、まだ理解しません – vbali

1

左右のパディングは、行/セル自体の内部で行うことができます。トップとボトムのパディングについては、コンテンツを持たず、選択できない行を追加することをお勧めします。これはセクシーではありませんが、私のために働いた。

1

あなたは、Mac OS 10.10以降をターゲットに設定している場合、あなたはおそらく、私は答えを誤解

[scrollView setAutomaticallyAdjustsContentInsets:NO]; 
[scrollView setContentInsets:NSEdgeInsetsMake(top, right, bottom, left)]; 
関連する問題