218

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

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

今日、私はクロスチェックをしなければならず、このスレッドに出くわしました。

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

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

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

(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)

XIBで?

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

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

XIBで?

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

4

4 に答える 4

47

はい、あなたは物事を正しく引用しました。また、少し後ろ向きに感じられる点にも同意しますので、その理由から投稿に感謝します。

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

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

を使用UIViewAutoresizingFlexibleMarginsすると、UI 要素がいずれかの側面に収まらないため、UI 要素が中央に配置されたままになります。要素を親と一緒に拡大/縮小するには、UIViewAutoresizingFlexibleWidthと をUIViewAutoresizingFlexibleHeightそれぞれ設定します。

UIViewAutoresizingFlexibleMargins後で次のように参照できるため、使用するのが好きです。

myView.autoresizingMask = UIViewAutoresizingFlexibleMargins;

それ以外の

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

上記の例のように、これらのマージンが 1 行に OR 結合されているのをよく見かけます。ただ読みにくい。

于 2011-10-18T23:01:22.377 に答える
35

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

于 2011-10-13T14:33:50.517 に答える
0

ここに画像の説明を入力

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

外側の左の線(左ストラット)を有効にすることは、有効にすることと同じではありませんUIViewAutoresizingFlexibleRightMargin。代わりに、UIViewAutoresizingFlexibleRightMargin=右ストラットが無効な場合はオン、右ストラットが有効な場合はオフ。

最初はかなり戸惑いますが、よく見るとスプリングとストラットに違いがあります。なぜ Apple がそうしたのかはわかりませんが、私にとっては使いやすい場合がいくつかありました。コードで反対のプロパティを使用すると、さらに混乱します。

于 2016-06-07T10:03:26.680 に答える