2012-08-30 8 views
8

私は、ビューコントローラのビューと、それを追加するためのプレースホルダビューを持つウィンドウとを含むオートレイアウトを有効にしたペンがあります。プレースホルダにはスーパービューやウィンドウ内の他のビューに関連する制約があり、ビューコントローラを操作する前に、ウィンドウのサイズを希望どおりに変更できます。後でペン先をロードしてプレースホルダのサブビューとしてそのトップレベルビューを追加し、プレースホルダの端に揃えるために手動で制約を作成します。Autolayoutは私のウィンドウのサイズを変更しています

いいえ、私のアプリではいくつかのインスタンスでこのパターンを使用していますが、そのような場合にはビューを追加した後にウィンドウのサイズが変更されます!ウィンドウの現在のサイズに拡大するビューの代わりに、追加されたビューの最小サイズに縮小しています。

私がこれを防ぐために見つけた唯一の方法は、ビューを追加して制約を作成するときに、プレースホルダとウィンドウの現在の状態の初期サイズを与えるためにビューのフレームを設定することです。これは大丈夫ですが、各エッジをプレースホルダスーパービューに合わせるだけで複雑な制約を定義できるようにしたいと考えています。私は、これらのケースのそれぞれについてフレーム算術をコード化したくありません。

何が起こっているのか知っていますか?ウィンドウがすでにプレースホルダのサイズを指定している場合は、それ以外の方法ではなく、現在のウィンドウサイズを優先させるためにサブビューを追加するときに何をする必要がありますか?

私はXcodeのIBウィンドウのポップアップメニューを見てきましたが、これはサブビューだけでなく、スーパービューにも影響するようですが、この機能に関連して何が起きていますか?私はそれについてまだ何も見つけていない。

+0

でプログラム的にそれを設定することができますか? – codingFriend1

+1

これをもっと明確にするために投稿を編集しました。私のプレースホルダーには、ウィンドウのサイズを変更する際に正しい動作を与えるための制約が既にあります。サブビューを追加するときに固定サイズの制約を追加すると、それが破られます。 –

+0

制約が正しい場合は、ウィンドウのサイズ変更が機能します。 –

答えて

9

圧縮抵抗の優先順位をNSLayoutPriorityWindowSizeStayPut(500)未満に設定すると、ウィンドウのサイズがビューのサイズよりも優先されます。

これはIBサイズのインスペクタから設定できます。

Compression resistance priority

それとも、あなただけのカスタムビュー(プレースホルダ)に幅の制約を設定できません-[NSView setContentCompressionResistancePriority:forOrientation:]

+0

これは優先権の問題であると思われます。しかし、この投稿を促した場合、ウィンドウは追加されたサブビューに必要なものよりも大きかった。サブビューは圧縮されていませんでしたが、代わりに展開されました(問題は拡大されず、代わりにウィンドウが縮小されたことでした)。これは圧縮抵抗の優先順位が作用しないことを意味しますか? Content Huggingの優先順位を<500に設定する必要がありますか、混乱しますか? (私はほぼ1年間オートレイアウトを行ってきましたが、私はまだ2つの優先順位セットの目的を視覚化するのが難しいと感じています)。 –

+0

はい、正しいですが、コンテンツの抱き合わせ優先度は<500でなくてはなりません。圧縮抵抗の優先順位は、スペースを減らすときにどのビューを縮小するか、スペースを増やすときには内容を抱くようにするときに使用されます。ウィンドウの滞在優先順位を500に設定すると、500未満の場合はウィンドウサイズが勝ち、500を超えるとビューが勝ちます – iain

関連する問題