Xibで右マージンインジケータを有効にすることは、コード内でUIViewAutoresizingFlexibleLeftMargin
などを使用することと同等であると(おそらく間違って)仮定していました。
だから、私はこのスナップショットに従って考えていました:
今日、私はクロスチェックをしなければならず、つまずいたこのスレッド。
また、このリンクのタイトル「-自動サイズ変更ルールを使用してレイアウトの変更を自動的に処理する」というタイトルのセクションが付いたAppleドキュメント: https://developer.Apple.com/library/content/ documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/CreatingViews/CreatingViews.html
だから、プログラムで自動サイズ変更マスクを設定することはxib設定と同等であるということについて、私の心の中に新しい概念があります:
シナリオ1:(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)
のみを設定することは次と同等です:
XIBで?
シナリオ2:コードで(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin)
を設定することは次と同等です:
XIBで?
更新された2つのシナリオは正しいですか?私は今、理解していますか?
はい、Interface Builderでは、ある意味で「逆」になっています(または、見方によってはUIView)。引用された「シナリオ」は正しいです。
はい、あなたは物事を正しく引用しました。また、私はそれが少し後方に感じることに同意するので、そのため、私はあなたの投稿に感謝します。
UIViewのマージンをあらゆる方向に柔軟にするときに、プリプロセッサマクロUIViewAutoresizingFlexibleMargins
を使用することができます。これをプリコンパイル済みヘッダーファイルに配置して、どこにでも含まれるようにします。
#define UIViewAutoresizingFlexibleMargins \
UIViewAutoresizingFlexibleBottomMargin | \
UIViewAutoresizingFlexibleLeftMargin | \
UIViewAutoresizingFlexibleRightMargin | \
UIViewAutoresizingFlexibleTopMargin
UIViewAutoresizingFlexibleMargins
を使用すると、UI要素はいずれかの側面をハグしないため、中央に配置されたままになります。要素を親と一緒に拡大/縮小するには、それぞれUIViewAutoresizingFlexibleWidth
とUIViewAutoresizingFlexibleHeight
を設定します。
UIViewAutoresizingFlexibleMargins
を使用したいのは、後で参照できるためです。
myView.autoresizingMask = UIViewAutoresizingFlexibleMargins;
の代わりに
myView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin;
上記の例のように、これらのマージンが1行でORで結合されていることがよくあります。読みにくい。
Swift 4これを使用
gadBannerView?.autoresizingMask = [.flexibleRightMargin , .flexibleLeftMargin , .flexibleTopMargin , .flexibleBottomMargin]
Objective-C
myView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin;
ボックス内で垂直/水平矢印(スプリングと呼ばれる)を有効にすると、高さ/幅が柔軟になります。ただし、外側の行(ストラットと呼ばれる)を有効にすると、その側は柔軟性がなくなり、柔軟性がなくなります。
左外側の行(左ストラット)を有効にすることは、UIViewAutoresizingFlexibleRightMargin
を有効にすることと同じではありません。代わりに、右ストラットが無効の場合、UIViewAutoresizingFlexibleRightMargin
=on、off右ストラットが有効な場合。
最初は非常に混乱しますが、よく見ると、スプリングとストラットに違いがあります。 Appleがこれを行った理由はわかりませんが、私にとっては、使いやすい場合がありました。また、コードで反対のプロパティを使用すると、さらに混乱します。