0

私はiOSにかなり慣れていません。そして、最初のアプリを書いているときに、自動レイアウトが iOS 6.0 専用であることに気付きました。そして、少なくとも 5.0 ios 用のアプリを作成したいと思います。

おそらく、自動レイアウトなしでこれを作成する方法を知っている人はいるでしょう。

ユーザー設定に応じて、1行または2行または3行の動的テキストを持つラベルがあります。そしてその下にuitextfieldがあります。自動レイアウトを使用すると、すべての作業が行われるため、頭痛の種はありません。テキストフィールドは、上の1行または2行または3行のテキストの下にうまく収まります(サイズ変更、自動的に移動します)。

では、自動レイアウトなしでこれを行うにはどうすればよいですか?

4

2 に答える 2

2

自動レイアウトがない場合は、これをコードで処理する必要があります。これを行うための推奨される方法は、コンテナビュー(ラベルとテキストファイルを含むビュー)をサブクラス化し、layoutSubviewsメソッドをオーバーライドすることです。そこで、必要な基準(ラベルテキストメトリックなど)に基づいて、ビューのサブビューのフレームを手動で設定します。

編集:これは、メソッドに含まれる可能性のあるものの特定の例ですcontainverView layoutSubviews(頭のてっぺんから入力):

// Those could be IBOutlets, or obtained by inspecting self.subviews
UILabel *label = self.label;
UITextField *textField = self.textField;

// Determine the labelSize, we could limit the maxSize (especially the height) manually here
CGSize maxSize = self.bounds.size;
CGSize labelSize = [label.text sizeWithFont:label.font constrainedToSize:maxSize lineBreakMode:label.lineBreakMode];

// Set the computed label size
CGRect labelFrame = label.frame;
labelFrame.size = labelSize;
label.frame = labelFrame;

// Now move the textField just below the label (we could also add a vertical margin here if we want)
CGRect textFieldFrame = textField.frame;
textFieldFrame.origin.y = labelFrame.origin.y + labelFrame.size.height;
textField.frame = textFieldFrame;

これにより、テキストフィールドが常にラベルの下にあることが確認されます。設定した制約によっては、UIが正しくレイアウトされるように、コードを追加する必要がある場合があります。

[containverView setNeedsLayout]また、ラベルテキストが変更されたときにそれが呼び出されることを確認する必要があります。

于 2012-11-05T12:28:28.897 に答える
0

nib または storybord を使用している場合は、ファイル インスペクターでマークを削除するだけです。 ここに画像の説明を入力

于 2012-11-05T13:04:11.490 に答える