translatesAutoresizingMaskIntoConstraints
をNO
に設定する必要があります。デフォルトでは、YES
に設定されます(ストラットとスプリングから新しい自動レイアウトに移行するアプリの大部分を支援するため)。
デフォルトをYES
からNO
に変更できるXcodeのどこかにありますか?
または、すべてのビューに対して手動で設定する必要がありますか?
これは素晴らしい質問です。私は自分自身に対する答えを見つけようとしました。悲しいことに、「クイックフィックス」はないようです。現在、Appleは制約ベースのレイアウトのオプトインを考慮します- UIView
クラス参照 のセクションに名前を付けます:
制約ベースのレイアウトへのオプトイン
しかし、そのオプトインはグローバルではありません。これは、Springs&StrutsをConstraintsに変更しただけではすべてがうまく見えないからだと思います。一部のUI要素が壊れているか、満たされない制約エラーが大量に発生します。
私は1つの可能なソリューションを考えることができます-私はそれを自分で試したことはありませんが、allを設定するUIView
のカテゴリを作成できますUIView
- (BOOL)translatesAutoresizingMaskIntoConstraints
に対してNO
を返すオブジェクト。これが何を破壊するかはわかりませんが、translatesAutoresizingMaskIntoConstraints
をNO
にグローバルに設定します。
カテゴリについて詳しく知りたい場合は、 カテゴリの良い紹介です !
私はこの質問に遅れましたが、言及されたオプションはXcode 5と6でまだ欠けているので、質問はまだ意味があります。
実際、次のスクリーンショットのようにStoryboard(Interface Builder)にser Defined Runtime Atributeを追加することにより、ビュー/コントロール/オブジェクトのプロパティに値をいつでも設定できます。
また、translatesAutoresizingMaskIntoConstraintsでも機能します。したがって、問題は解決できます。
サブビューのサイズまたは位置を変更する必要がある場合。使用する (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)であるため、サブビューが制約と戦うことはありません。ありがとう
ドキュメントによると、ビューがInterface Builderを介して追加された場合、このプロパティは自動的にNO
に設定されます。