Interface Builderでいくつかのサブビューをレイアウトしましたが、代わりにコードでそれを行いたいです。
View.autoresizingMaskプロパティの設定について IView docs を読みました。提供されているさまざまなマスク(UIViewAutoresizingFlexibleLeftMargin
など)を使用してストラットとスプリングを変換する方法の論理的な説明を探しています。
ビューの自動サイズ変更マスクを設定するときは、ビット単位の包括的OR(|
)(Objective-C)、またはspringsおよびstrutsを指定する配列(Swift 2、3)。
Springsは、マスクを指定することで表されます(Objective-CまたはSwift 3、それぞれ):
垂直スプリング:UIViewAutoresizingFlexibleHeight
または.flexibleHeight
水平スプリング:UIViewAutoresizingFlexibleWidth
または.flexibleWidth
ストラットは、4つの「柔軟なマージン」マスクのいずれかが欠けていることで表されます(つまり、ストラットが存在しない場合、そのマージンのマスクが指定されます)。
UIViewAutoresizingFlexibleLeftMargin
または.flexibleLeftMargin
UIViewAutoresizingFlexibleRightMargin
または.flexibleRightMargin
UIViewAutoresizingFlexibleTopMargin
または.flexibleTopMargin
UIViewAutoresizingFlexibleBottomMargin
または.flexibleBottomMargin
たとえば、水平スプリングおよび上部および下部ストラットを持つビュー幅と、左右のマージンがフレキシブルとして指定されます:
Swift
mySubview.autoresizingMask = [.flexibleWidth, .flexibleLeftMargin, .flexibleRightMargin]
スイフト2
mySubview.autoresizingMask = [.FlexibleWidth, .FlexibleLeftMargin, .FlexibleRightMargin]
Swift 1.2
mySubview.autoresizingMask = .FlexibleWidth | .FlexibleLeftMargin | .FlexibleRightMargin
Objective-C
mySubview.autoresizingMask = (UIViewAutoresizingFlexibleWidth |
UIViewAutoresizingFlexibleLeftMargin |
UIViewAutoresizingFlexibleRightMargin);
UIViewAutoResizingMask
sは、「ストラット」および「スプリング」と呼ばれるものです。このことを考慮してください。内側に小さな正方形のある大きな正方形があります。その正方形が完全に中央にとどまるようにするには、大きな正方形の内側の各エッジから固定幅を設定して、それを制約する必要があります。これらは支柱です。
一方、スプリングは、回転中のUIView
のように機能します。ビューが画面の下部にとどまり、中央に配置される必要があるとしましょう(UIToolbar
のように)。ビューが460ピクセルから320ピクセルに回転したときに、画面の現在の変更された寸法に対して同じ位置を維持するように、Topスプリングを柔軟に保ちたいです。 IBでこれらのスプリングの1つを強調表示することは、適切なUIViewAutoResizingMask
を設定することと等しく、特に上部のスプリングを強調表示することは_myView.autoResizingMask = UIViewAutoresizingFlexibleTopMargin
_を呼び出すことに似ています。
値は、一対の括弧で囲み、myView.autoResizingMask = (UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleLeftMargin)
のようなor演算子を使用することにより、タンデムで使用できます。
マスクはNSUInteger
のtypdefであり、それらはAppleが割り当てたフラグです。Cmd+クリックしてメソッド定義を表示します。 。