私はカスタムUIViewの自動サイズ変更に取り組んできましたが、Appleはこれについてほとんど何も言うことがありません。さらに、SOフィードバックに基づくと、Appleのドキュメントは実際には最後に、Interface Builderには6つのサイズ変更コンポーネントがあり、setAutoresizingMask:
には6つのサイズ変更コンポーネントがありますが、それらはまったく相関していないようです。たとえば、IBで幅スプリングを設定すると、設定とは異なる効果があります。デバイスを回転させるときのautoresizingMask
からUIViewAutoresizingFlexibleWidth
。
IPhoneでサイズ変更がどのように機能するかを学ぶための良いリソースはありますか?
編集:
私は基本的な概念を理解していますApple contentModeなどの使用法、およびUIViewのドキュメントを読みました。IB設定が何をするかについてもう少し深く説明するものを探しています。プログラムでSDKで利用できるもの。
autoresizingMask
をUIViewAutoresizingFlexibleWidth
に設定することは、幅のばねに加えて、Interface Builderで左右両方の支柱を設定することと同じです(支柱は、エッジがnotであることを意味しますフレキシブル)。幅のばねのみを設定し、左右の支柱は設定しない動作を再現する場合は、autoresizingMask
をUIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin
に設定する必要があります。
この投稿は、iOSの自動サイズ変更を理解するのに役立ちました。
http://www.techotopia.com/index.php/IOS_4_iPhone_Rotation,_View_Resizing_and_Layout_Handling
Appleから:
... Cビット単位のOR演算子を使用してUIViewAutoresizingで説明されている定数を組み合わせることにより、このマスクの値を指定します。これらの定数を組み合わせることで、ビューのどの次元を相対的に拡大または縮小するかを指定できます。 superview。このプロパティのデフォルト値はUIViewAutoresizingNoneです。これは、ビューのサイズをまったく変更しないことを示します。
...たとえば、このプロパティにUIViewAutoresizingFlexibleWidth定数とUIViewAutoresizingFlexibleRightMargin定数が含まれているが、IViewAutoresizingFlexibleLeftMargin定数は含まれていないであるとすると、ビューの左マージンの幅は固定されていますですがビューの幅と右マージンが変わる可能性があることに注意してください。したがって、ビューはスーパービューの左側に固定されているように見えますが、ビューの幅とビューの右側のギャップの両方が増加します。
自動サイズ変更の動作でビューに必要な正確なレイアウトが提供されない場合は、カスタムコンテナビューを使用し、そのlayoutSubviewsメソッドをオーバーライドして、サブビューをより正確に配置できます。
したがって、スーパービューの上部と右側に固定されたビューを配置する場合は、次のようなマスクを適用できます。
[myView setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleBottomMargin];
superviewには、contentModeやautoresizesSubviewsなどのパラメーターがあり、すべてサブビューのautoresizingMaskにより、サイズ変更の動作が行われます
記録のために、1行のUILabelがフォントサイズを幅に合わせて自動調整しないため、1時間頭をかきました。最後に、これはトリックを行いました:
label.contentMode = UIViewContentModeScaleAspectFit;
私はグーグルで検索しましたが、誰もこの詳細を明確にしていないようです(ラベルは1行にする必要があると誰もが言っています、adjustsFontSizeToFitWidth/minimumFontSizeなどを設定してください)。おそらく、このプロパティのデフォルト値が変更されましたか?私はiOS4.3を使用しています。