web-dev-qa-db-ja.com

UIView autoresizingMask-Interface Builder for Code-プログラムでストラットとスプリングを作成-SwiftまたはObjective-C

Interface Builderでいくつかのサブビューをレイアウトしましたが、代わりにコードでそれを行いたいです。

View.autoresizingMaskプロパティの設定について IView docs を読みました。提供されているさまざまなマスク(UIViewAutoresizingFlexibleLeftMarginなど)を使用してストラットとスプリングを変換する方法の論理的な説明を探しています。

55
MattyG

ビューの自動サイズ変更マスクを設定するときは、ビット単位の包括的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);

enter image description here

127
MattyG

UIViewAutoResizingMasksは、「ストラット」および「スプリング」と呼ばれるものです。このことを考慮してください。内側に小さな正方形のある大きな正方形があります。その正方形が完全に中央にとどまるようにするには、大きな正方形の内側の各エッジから固定幅を設定して、それを制約する必要があります。これらは支柱です。

一方、スプリングは、回転中のUIViewのように機能します。ビューが画面の下部にとどまり、中央に配置される必要があるとしましょう(UIToolbarのように)。ビューが460ピクセルから320ピクセルに回転したときに、画面の現在の変更された寸法に対して同じ位置を維持するように、Topスプリングを柔軟に保ちたいです。 IBでこれらのスプリングの1つを強調表示することは、適切なUIViewAutoResizingMaskを設定することと等しく、特に上部のスプリングを強調表示することは_myView.autoResizingMask = UIViewAutoresizingFlexibleTopMargin_を呼び出すことに似ています。

値は、一対の括弧で囲み、myView.autoResizingMask = (UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleLeftMargin)のようなor演算子を使用することにより、タンデムで使用できます。

マスクはNSUIntegerのtypdefであり、それらはAppleが割り当てたフラグです。Cmd+クリックしてメソッド定義を表示します。 。

9
CodaFi