0

「シングルビュー」アプリケーションテンプレートを使用してXcodeプロジェクトを起動し、テンプレートで作成されたViewControllerクラスに2行を追加しましたviewDidLoad

UITextView *textView = [[UITextView alloc] initWithFrame:CGRectInset(self.view.bounds, 10, 10)];
[self.view addSubview:textView];

これを3.5インチのiPhoneシミュレーターで実行すると、テキストビューが画面の下部から広がります。画面の中央に10ポイントの境界線で配置することを意図していました。

Am I missing something basic? It seems to work fine in the 4" simulator. Is it a simulator bug?

4

1 に答える 1

3

シミュレーターのバグではありません。

Xcode テンプレートには xib が含まれており、その xib はビュー コントローラーの最上位ビュー ( self.view) であり、そのビューは iPhone 5 の画面に合わせてサイズ設定されています。

システムがビュー コントローラーに送信viewDidLoadするとき、現在のデバイスの画面サイズに合わせてそのビューのサイズを変更していません。したがって、テキスト ビューのフレームは、iPhone 5 の画面のサイズに基づいています。

ビューに自動サイズ変更フラグを設定することで、これを修正できます。

UITextView *textView = [[UITextView alloc] initWithFrame:CGRectInset(self.view.bounds, 10, 10)];
[self.view addSubview:textView];
textView.autoresizingMask = UIViewAutoresizingFlexibleHeight
    | UIViewAutoresizingFlexibleWidth;

xib はデフォルトで autolayout を使用するように設定されているため、テキスト ビューとトップレベル ビューの間に制約を設定することで、システムにテキスト ビューのサイズを変更させることもできます。

UITextView *textView = [[UITextView alloc] initWithFrame:CGRectInset(self.view.bounds, 10, 10)];
[self.view addSubview:textView];
textView.translatesAutoresizingMaskIntoConstraints = NO;
[self.view addConstraints:[NSLayoutConstraint
    constraintsWithVisualFormat:@"H:|-10-[textView]-10-|" options:0 metrics:nil
    views:NSDictionaryOfVariableBindings(textView)]];
[self.view addConstraints:[NSLayoutConstraint
    constraintsWithVisualFormat:@"V:|-10-[textView]-10-|" options:0 metrics:nil
    views:NSDictionaryOfVariableBindings(textView)]];

テキスト ビューをコードで作成する代わりに xib に配置する場合は、xib エディター (別名「Interface Builder」または「IB」) を使用して制約を設定できます。WWDC 2012の自動レイアウト ビデオを見ることを強くお勧めします。

  • セッション 202 - iOS および OS X の自動レイアウトの紹介
  • セッション 228 - 自動レイアウトをマスターするためのベスト プラクティス
  • セッション 232 - 例による自動レイアウト
于 2012-11-12T22:15:22.300 に答える