16

NSScrollView自動レイアウトを使用するときに、サイズが変化するドキュメントビューに適応する簡単な方法はありますか?

ドキュメントビュー、クリップビュー、スクロールビューの両方を呼び出そうとしましたが、結果はありませんでしsetNeedsUpdateConstraints:た。setNeedsLayout:

fittingSizeドキュメントビューのは正しいサイズを報告します。

問題は、サブビューが呼び出されても、サブビューのサイズが変更されたときに、サブビューを保持するドキュメントビューのサイズが変更されないことinvalidateIntrinsicContentSizeです。したがって、ドキュメントビューのコンテンツは、大きくなるにつれてドキュメントビューの元のサイズにクリップされます。ドキュメントビューはペン先で作成され、メソッドでスクロールビューのドキュメントビューとして設定されますawakeFromBib

ドキュメントビューフレームが変更されたときに自動的に調整さfittingSizeれ、それに応じてスクロールバーが更新されることを期待していました。

NSPopoverコンテンツコントローラのビューのサブビューに制約が正しく設定されていて、さまざまなコンテンツハグ値が十分に高い場合(たとえば、非表示のポップオーバーウィンドウの最高の制約優先度よりも高い)、同様のことを行います。

4

1 に答える 1

15

もちろん問題は、ドキュメントビューを追加するときに、Cocoaがドキュメントビューが挿入されるビュー、つまりクリップビューにいくつかの厳しい制約を自動的に作成することです。

したがって、私自身の質問に対する答えは簡単です。次を使用するだけです。

// Assume self.docView is an IBOutlet populated with
// an NSView subclass
self.docView.translatesAutoresizingMaskIntoConstraints = NO;

ドキュメントビューをスクロールビューに追加する前に:

self.scrollView.documentView = self.docView;

これで、クリップビューのドキュメントビューのレイアウトに自動生成された制約がないため、それらを明示的に追加する必要があります。それ以外の場合、ドキュメントビューのコンテンツは、スクロールビューの左上隅に本来のサイズでレンダリングされます。

于 2012-05-30T09:53:06.750 に答える