プログラムによるマスクの自動サイズ変更とInterface Builder / xib / nib


216

xibで右マージンインジケーターを有効にすることは、UIViewAutoresizingFlexibleLeftMargin内部コードなどを使用することと同等であるという(おそらく誤った)仮定にいました。

だから、私はこのスナップショットに従って考えていました: ここに画像の説明を入力してください

後で今日、私はクロスチェックする必要があり、このスレッドに出くわしました。

また、このリンクのタイトルが付いたセクション-「レイアウトの変更を自動サイズ変更ルールを使用して自動的に処理する」のタイトルが付けられたアップルのドキュメント:https ://developer.apple.com/library/content/documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/CreatingViews/ CreatingViews.html

したがって、自動サイズ変更マスクをプログラムで設定することはxib設定とどのように同等であるかについて、新しい概念が頭に浮かびました。

シナリオ1:設定のみ(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)が以下と同等です。

(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)

XIBでは?

シナリオ2(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin)コードの設定は以下と同等です。

(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin)

XIBでは?

私の2つの更新されたシナリオは正しいですか?今私は理解していますか?


3
冗談ですか?しかし、私の混乱もあるようです。したがって、上をハグしたい場合は、下の自動サイズ変更をオンにします。よくできました。これは私が今まで見た中で最もばかげた設定です。
user4951 2012年

1
トップをハグしたい場合は、ビットマスクコードでUIViewAutoresizingFlexibleTopMarginに触れないようにする必要があります。私の以前の仮定は間違っていたので、私はこの質問を投稿して問題を解決しました。
Raj Pawan Gumdal、2012年

あなたの仮定は正しいです。どこが悪いの?
user4951 2012年

はい、あなたが引用する2つのシナリオは正しいです。

3
私はこのための簡単なツールを作成しました:erkanyildiz.me/lab/autoresizingmask使用できます。
erkanyildiz 2016

回答:


35

はい、Interface Builderはある意味で(または見方によってはUIView)「逆転」しています。あなたの引用された「シナリオ」は正しいです。


47

はい、あなたは物事を正しく引用しました。また、少し逆に感じられることにも同意するので、その理由であなたの投稿に感謝します。

UIViewAutoresizingFlexibleMarginsUIViewのマージンをあらゆる方向に柔軟にする場合、プリプロセッサマクロを使用することをお勧めします。これをプリコンパイル済みヘッダーファイルに入れて、どこにでも含まれるようにします。

#define UIViewAutoresizingFlexibleMargins                 \
              UIViewAutoresizingFlexibleBottomMargin    | \
              UIViewAutoresizingFlexibleLeftMargin      | \
              UIViewAutoresizingFlexibleRightMargin     | \
              UIViewAutoresizingFlexibleTopMargin

を使用UIViewAutoresizingFlexibleMarginsすると、UI要素は中央に配置されたままになります。要素をその親と共に拡大/縮小するには、UIViewAutoresizingFlexibleWidthおよびUIViewAutoresizingFlexibleHeightそれぞれます。

UIViewAutoresizingFlexibleMargins後でそれを参照できるので、私は使用するのが好きです:

myView.autoresizingMask = UIViewAutoresizingFlexibleMargins;

の代わりに

myView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin;

これらのマージンは、上記の例のように1行でORされていることがよくあります。読みにくい。


4
あらゆる方向に柔軟である必要があります(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)私は推測しますか?それとも私は混乱していますか?
Raj Pawan Gumdal、2011年

4
FlexibleMarginsは、要素を中央に留めます(左、上、右、または下のマージンをハグしません)。幅/高さを柔軟に設定すると、UI要素がそれぞれ拡大/縮小します。
Sam

4
今、すべてがはっきりしていますか?また、私はあなたの投稿を高く評価したと言ったときに本当にそれを意味しました。私は実際にb / cをお気に入りに追加しました。これにより、以前は混乱していました。私はそれは素晴らしいことだと思うQ.
サム・

3
はい、ありがとうございます。「柔軟なマージン」と「柔軟な幅/高さ」を実現しました。それがすべてを説明しており、「左、上、右、または下のマージンをハグしていない」ことを説明する良い方法です:)
Raj Pawan Gumdal

0

ここに画像の説明を入力してください

ボックス内の垂直/水平矢印(スプリングと呼ばれる)を有効にすると、高さ/幅が柔軟になります。しかし、外側の線(ストラットと呼ばれます)を有効にすると、その側に柔軟性/柔軟性がなくなります。

外側の左線(左支柱)を有効にすることは、を有効にすることと同じではありませんUIViewAutoresizingFlexibleRightMargin。代わりに、UIViewAutoresizingFlexibleRightMargin= 右側の支柱は、無効になった場合にオフ、右の支柱が有効になっている場合。

最初はかなりわかりにくいですが、よく見るとバネと支柱に違いがあります。なぜAppleがこれをしたのかはわかりませんが、私にとっては、使いやすい場合がいくつかありました。また、コードで反対のプロパティを使用すると、さらに混乱します。


0

Swift 4 はこれを使用します

gadBannerView?.autoresizingMask = [.flexibleRightMargin  , .flexibleLeftMargin , .flexibleTopMargin , .flexibleBottomMargin]

Objective-C

myView.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.