2

Lion の自動レイアウトを使用して、画像が中央に配置され、その周りに境界線があるスクロール可能なビューを含むこの単純なウィンドウを作成する最良の方法を見つけようとしています。私の素晴らしいASCIIアートを見てください:

+==============+
|             ||
|    XXXXXX   ||
|    XXXXXX   ||
|    XXXXXX   ||
|              |
+--------------+

NSScrollView のドキュメント ビューは、背景パターンを描画する反転した NSView サブクラスであり、その中にユーザーが選択した画像 (サイズが不定) を追加します。画像ビューを追加するときは、ドキュメント ビューの中央に配置するように制約を与えます。ドキュメント ビュー自体には、読み込まれた画像よりもわずかに大きくする必要があるという制約が与えられます。私が望んでいるのは明らかな動作です.scollviewよりも大きな画像をロードすると、スクローラーがアクティブになり、ウィンドウのサイズを変更すると、スクローラーが正常にアクティブ/非アクティブになります。

ただし、大きな画像を読み込むと、ドキュメント ビューは正常に拡大されますが、スクロール ビューとウィンドウが拡大されます。それ以降は、ウィンドウのサイズをこれ以上小さくすることはできません。明らかに私はそれを正しく行っていませんが、その理由はわかりません。

ドキュメント ビューの制約の優先順位を変更しようとしましたが、NSLayoutPriorityWindowSizeStayPut より上にあるものは何でも、ウィンドウは上記のように拡大します (私が推測するのは理にかなっています)。有効にします。

他の場所で設定する必要がある他の優先順位、必要な追加の制約、またはまったく別のアプローチがあるかどうかは誰にもわかりません..代わりに、ドキュメントビューの「固有のサイズ」を設定する必要がありますか? また、まだ見たことのない autolayout のオープン ソース/サンプル コードへのポインタも役立ちます。

4

1 に答える 1

2

translatesAutoresizingMaskIntoConstraintsこれは古い落とし穴であることが判明しました。これらの問題を抱えていたとき、Interface Builder 内で NSScrollView のドキュメント ビューを設定していました。

実行時にビューを作成するように変更し (または、IB で「ルーズ」ビューとして個別に定義することもできました)、それをウィンドウ コントローラーに接続します。

self.backgroundPatternView.translatesAutoresizingMaskIntoConstraints = NO;
self.scrollView.documentView = self.backgroundPatternView;

この変更後、デフォルトの優先度は正常に機能しました。

于 2012-10-09T21:02:53.137 に答える