定数を使用しない代替手段です。アイデアは、あなたが左のテキストフィールドの幅を再計算するような方法でオートレイアウトを設定し、テキストが変更されたときにレイアウトを更新することです。
最初に、左のテキストフィールドのハギング優先度を右のテキストフィールドより高く設定します。コンテナに左のテキストフィールドの
- 左余白に固定された水平間隔を持っている必要があり、左のテキストフィールドの
- 右マージン(またはその他の項目は、単純に左マージンを修正する):あなたはこれらの水平制約がインストールされていることを確認してください右のテキストフィールドの左余白(これはテキストフィールドの間のギャップです、標準は8pxですが、もちろんあなたが望むものを使用します)
- コンテナの右側の右のテキストフィールドの右余白か、右端から
2つのテキストフィールドは左右のマージンの間にあるスペースを占有し、autolayoutはどのテキストフィールドが優先されるかを決める必要があります。左のテキストフィールドでハギングの優先度を高く設定すると、使用可能なスペースがある場合は右のテキストフィールドを展開する方が望ましいと言われます。したがって、両方のフィールドが空白の場合は、完全なスペースが使用されます。このため、テキストフィールドのサイズ/サイズを制限するために、より大きいか小さいかの制約を設定する必要があります。
ここでは、両方のテキストフィールドが空で始まるものとします。この時点で、左のテキストフィールドに最小の幅を指定することは賢明です。そうでないと、幅が0になり、テキストを入力できなくなるからです。テキストの入力を可能にするには、最小サイズ約50が妥当であるべきですが、何が効果的かを試してみてください。
テキスト編集をキャプチャすることを忘れないでくださいので、あなたのviewDidLoadまたは他の初期化方法で
[leftTextField addTarget:self action:@selector(leftTextChanged) forControlEvents:UIControlEventEditingChanged];
どこかを呼び出し、あなたはleftTextField
という名前の変数にテキストフィールドを持っていると仮定すると、テキストフィールドのプロパティを変更しました。
残っているのは、ビューの本来のサイズを再計算して更新するようにautolayoutに依頼することだけです。これはlayoutIfNeeded
を呼び出すことによって行われているので、あなたの方法は、このことができます
- (void)leftTextChanged {
[self.view layoutIfNeeded];
}
希望のようになります。
自動レイアウトを使用していますか? –
はい - 左のUILabelにあります。しかし、私は右手のUITextFieldボックスの幅で設定したいが、左のUILabelが大きくなると縮小したい –