Hier ist eine Alternative ohne Konstanten zu verwenden. Die Idee besteht darin, das automatische Layout so einzurichten, dass es die Breite des linken Textfelds für Sie neu berechnet, sodass Sie das Layout einfach aktualisieren, wenn sich der Text ändert.
Zuerst legen Sie die Umgehungspriorität im linken Textfeld so fest, dass sie höher ist als im rechten Textfeld. Vergewissern Sie sich, diese horizontalen Einschränkungen installiert:
- Linker Rand des linken Textfeld Behälter (oder ein anderes Element, einfach fixieren den linken Rand)
- Rechter Rand des linken Textfeld sollte einen festen horizontalen Abstand haben linker Rand des rechten Textfelds (das ist die Lücke zwischen den Textfeldern, Standard ist 8px, aber verwenden Sie natürlich, was Sie wollen)
- Rechter Rand des rechten Textfelds auf der rechten Seite des Containers oder was auch immer Sie verwenden, um die zu verankern rechte Seite zu
Diese Kräfte Die zwei Textfelder, die einen bestimmten Abstand zwischen den linken und rechten Rändern einnehmen sollen, und das automatische Layout müssen entscheiden, welches Textfeld Vorrang erhält. Wenn Sie für linkes Textfeld die Umgehungspriorität höher setzen, geben Sie an, dass Sie das rechte Textfeld bevorzugen, um zu erweitern, wenn Platz verfügbar ist. Wenn also beide Felder leer sind, nimmt das rechte das gesamte Feld ein. Deshalb müssen Sie Constraints größer als oder kleiner als Constraints festlegen, um zu begrenzen, wie klein/groß Ihre Textfelder werden können.
Nehmen wir an, wir beginnen mit beiden leeren Textfeldern. An dieser Stelle wäre es schlau, für das linke Textfeld eine Mindestbreite anzugeben, da es ansonsten eine Breite von 0 hat und somit kein Text eingegeben werden kann. Eine Mindestgröße von etwa 50 sollte für eine Texteingabe angemessen sein, aber versuchen Sie zu sehen, was für Sie funktioniert.
Denken Sie daran, die Textbearbeitung geändert Eigenschaft auf dem Textfeld zu erfassen, so dass Sie das Textfeld leftTextField
, rufen
[leftTextField addTarget:self action:@selector(leftTextChanged) forControlEvents:UIControlEventEditingChanged];
irgendwo Methode in Ihrem viewDidLoad oder anderer Initialisierung genannt in einer Variable angenommen wird.
Jetzt ist alles, was übrig bleibt, um Autolayout zu bitten, die innere Größe der Ansichten neu zu berechnen und sich selbst zu aktualisieren. Dies geschieht durch Aufruf layoutIfNeeded
getan, so dass Ihre Methode wie
- (void)leftTextChanged {
[self.view layoutIfNeeded];
}
Hoffnung aussehen würde, das hilft.
Verwenden Sie automatisches Layout? –
Ja - auf der linken Seite UILabel. Aber ich möchte mit der Breite der rechten UITextField-Box festlegen, aber verkleinern, wenn die UILabel auf der linken Seite wächst –