web-dev-qa-db-ja.com

Xcodeチェックボックス「自動サイズ変更マスクを制約に変換」はどこにありますか

WWDC 2012のビデオの1つであるAuto Layout By Exampleでは、Autolayoutを使用してOS Xアプリをデモし、約7または8分で、単一のビューの方法を示し、属性インスペクターのボックスをオフにして、ボックスは"Autoresizing Mask Intos Constraints"のように呼ばれます。今、私はこのボックスに相当するコードtranslatesAutoresizingMaskIntoConstraints booleanをよく知っていますが、iOSまたはOS Xプロジェクトのどこにもこのチェックボックスはありません。私のプロジェクトではAutolayoutを使用しています。 Autolayoutの学習(およびSprings/StrutsアプリをALに変換する)で苦労していることの1つは、Xcodeが各ビューに対して生成した100万の制約と、それらをクリーンアップして適切にオーバーライドする方法なので、本当にこのチェックボックスが欲しいコードの一部またはすべて。この変換を一度に1つのビューで実行するには、自動生成された制約をオフにします。

このチェックボックスが表示されないのはなぜですか? Xcode 4.6を使用しています。

23
bobsmells

このチェックボックスは、Interface Builder(IB)で使用できますが、OS Xを対象とするCocoaプロジェクトを開発している場合のみです。iOSの場合、現時点では使用できません。プログラムでのみ設定できます。

私の理解によるiOSの自動レイアウト-そして他の人はここに自由に提案-はOS Xで利用可能なものの完全な実装ではありません。

正直なところ、後で言うことを考えると、このチェックボックスはおそらく心配する必要はありません。 OS XプロジェクトをAuto Layoutにアップグレードすることは重要だと思いますが、一般的にiOSの場合、一方と他方を混在させることはほとんどありません。つまり、ファイルインスペクタでXibに「自動レイアウトを使用する」チェックボックスをオンにするか、オフにします。

enter image description here

そうは言っても、そのフラグをいじる必要があるかもしれないユースケースが1つあります。これは、ビューのスタンドアロンXibファイルを作成し、loadNibNamedを使用してプログラムでロードする場合です。その場合、デフォルトでは、古いスタイルの自動サイズ変更制約が新しいスタイルの自動レイアウト制約に変換されます。通常、自分のフラグを追加したいので、そのフラグをzap 'emに設定します。

myView.translatesAutoresizingMaskIntoConstraints = NO

とにかくそれは別の話です。

詳細はこちらのリンクをご覧ください。

自動レイアウトの採用

私が言う1つのことは、もしあなたが最初に自動レイアウトに苦労しているなら-あなたがそうでなければ人間ではないだろうなら、私たちは皆そうでした-それから私はInterface Builderにこだわり、黄金ルール。私にとって最も重要なのは、あいまいさを嫌うということです。それは本質的に真空のようなものです。不要な制約を削除する前に、必要な制約を追加する必要があります次に、古いものを消去します。

私が犯したもう1つの間違いは、自動レイアウトとフレームの混合でした。したがって、フレーム幅をチェックするコードを実行してから、それを制約に適用します。悪い間違い。それは本当に涙で終わります。自動レイアウトに入るときは、CGRectframeなどを使用して何かを行うことを忘れることが不可欠です。

それにこだわる。 IBのいくつかの単純なビューから始めて、実験します。本当に狂気への方法があります。

また、注目に値するもう1つのリンクは次のとおりです。

Cocoa Autolayoutについて知っておくべき10のこと

27
Max MacLeod