web-dev-qa-db-ja.com

Xcode 4.5でtranslatesAutoresizingMaskIntoConstraintsを設定する場所

translatesAutoresizingMaskIntoConstraintsNOに設定する必要があります。デフォルトでは、YESに設定されます(ストラットとスプリングから新しい自動レイアウトに移行するアプリの大部分を支援するため)。

デフォルトをYESからNOに変更できるXcodeのどこかにありますか?

または、すべてのビューに対して手動で設定する必要がありますか?

34
Jon Cox

これは素晴らしい質問です。私は自分自身に対する答えを見つけようとしました。悲しいことに、「クイックフィックス」はないようです。現在、Appleは制約ベースのレイアウトのオプトインを考慮します- UIViewクラス参照 のセクションに名前を付けます:

制約ベースのレイアウトへのオプトイン

しかし、そのオプトインはグローバルではありません。これは、Springs&StrutsをConstraintsに変更しただけではすべてがうまく見えないからだと思います。一部のUI要素が壊れているか、満たされない制約エラーが大量に発生します。

私は1つの可能なソリューションを考えることができます-私はそれを自分で試したことはありませんが、allを設定するUIViewのカテゴリを作成できますUIView- (BOOL)translatesAutoresizingMaskIntoConstraintsに対してNOを返すオブジェクト。これが何を破壊するかはわかりませんが、translatesAutoresizingMaskIntoConstraintsNOにグローバルに設定します。

カテゴリについて詳しく知りたい場合は、 カテゴリの良い紹介です

16
redlightbulb

私はこの質問に遅れましたが、言及されたオプションはXcode 5と6でまだ欠けているので、質問はまだ意味があります。

実際、次のスクリーンショットのようにStoryboard(Interface Builder)にser Defined Runtime Atributeを追加することにより、ビュー/コントロール/オブジェクトのプロパティに値をいつでも設定できます。

また、translatesAutoresizingMaskIntoConstraintsでも機能します。したがって、問題は解決できます。

enter image description here

20
CocoaBob

サブビューのサイズまたは位置を変更する必要がある場合。使用する (BOOL)translatesAutoresizingMaskIntoConstraintsメソッドを使用して、サブビューのフレームを設定します。

[self.benchmarkButton removeFromSuperview];
[self.benchmarkButton setTranslatesAutoresizingMaskIntoConstraints:YES];
[self.benchmarkButton setFrame:CGRectMake(20, self.benchmarkButton.frame.Origin.y+40, 260, 30)];
[self.benchmarksView addSubview:self.benchmarkButton];

これは、Xcode 4.3以降ではデフォルト(AutoLayout)であるため、サブビューが制約と戦うことはありません。ありがとう

4

ドキュメントによると、ビューがInterface Builderを介して追加された場合、このプロパティは自動的にNOに設定されます。

https://developer.Apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/#//Apple_ref/occ/instp/UIView/translatesAutoresizingMaskIntoConstraints

4
kwl