2017-03-11 2 views
1

So habe ich derzeit eine UIView Unterklasse namens: "InputView" mit zwei Unteransichten, eine UILabel und eine UITextField. Die Art, wie ich es eingerichtet habe, ist, ich kann den Platzhalter für Etiketten und Textfelder so ändern, dass diese InputView als modulare Komponente für jedes Eingabefeld in meiner App (E-Mail, Passwort, etc.) dienen kann. Alles, was ich tun muss, ist erstellen eine leere UIView in meinem Storyboard, stellen Sie es als InputView Klasse, und den Rest haben programmgesteuert erfolgen.Wie erstelle ich ein SubView, das dynamisch erscheint und seine Superview-Größe erweitert. (in code)

Jetzt renne ich in ein Problem. Die InputView sind einfache UIView 's, deren Einschränkungen im Storyboard festgelegt sind, aber ich möchte eine Unteransicht (eine Tabelle) hinzufügen, die dynamisch erscheint/verschwindet, wenn ein Benutzer die UITextField bearbeitet. Jedes Mal, wenn die Tabelle erscheint, dehnt sich die InputView in der Höhe aus, schiebt alles darunter nach unten und verschwindet dann sehr sauber hinterher.

Ich habe keine Ahnung, wie das geht. Hier ist, was ich gedacht habe:

Idee 1: Platzieren Sie die Tabelle in der Ansicht, fügen Sie alle notwendigen Einschränkungen hinzu und hoffe, dass InputView von selbst erweitert. Dies führt zu dem Tisch außerhalb des Rahmens der InputView und daher nicht mehr auf Benutzer berühren aus irgendeinem Grunde

Idee 2 sein: durch die Tabellen Höhe es Höhe ändern Sie die Grenzen der InputView und erweitern. Das funktioniert nicht, weil die Einschränkungen im Storyboard festgelegt sind, und ich habe keinen Zugriff auf sich programmatisch

Idee 3: Nach fast 5 Stunden Forschung und gescheiterte Versuche, gehen und sehen Stackoverflow, wenn jemand hat eine Idee, wie man es beheben kann. (Danke!)

Antwort

0

Sie können festlegen, dass Ihre Storyboard-Einschränkungen programmgesteuert geändert werden können.

1) Im Storyboard, stellen eine Höhe Einschränkung für inputView und setzen ihn auf den Wert, der Sinn für macht, wenn die Tabelle nicht sichtbar ist -. Vermutlich um 30. (Sie haben wahrscheinlich bereits getan)

2) Erstellen Sie dann eine Steckdose für Ihren Code, indem Sie diese Höhenbeschränkung durch Ziehen auf die Datei ziehen, die dem Ansichtscontroller entspricht, der inputView enthält. In einem Dialogfeld werden Sie aufgefordert, der Steckdose einen Namen in Ihrem Code zu geben. Nennen Sie es so etwas wie inputViewHeightConstraint.

3) Wenn Sie Ihre Eingabeansicht in Ihrem Code vergrößern möchten, setzen Sie inputViewHeightConstraint.constant auf einen neuen Wert. Beachten Sie, dass Sie auf .constant verweisen müssen, um die neue Höhe der Einschränkung festzulegen.

Wenn Sie zum ersten Mal Ihre Höhenbeschränkung für inputView festlegen, stellen Sie sicher, dass es eine Gleichheitsbedingung (z. B. seine Höhe ist gleich 30) statt einer Beschränkung "größer als oder gleich" ist. Obwohl Letzteres sinnvoller wäre, da Sie es in Ihrem Code zu einem größeren Wert ändern, habe ich festgestellt, dass es bei diesem Ansatz Fehler gibt. Es zu einer direkten Gleichheitsbedingung zu machen funktioniert sauberer.

+0

Es funktioniert !! Für zukünftige Reisende, [http://stackoverflow.com/questions/12622424/how-do-i-animate-constraint-changes], wie man es animiert (warum würden Sie es dynamisch ohne ändern) etwas Animation?) Viel Glück alles – QuantumHoneybees

Verwandte Themen