2016-06-03 11 views
0

Ich habe ein bisschen mit visuellen Einschränkungen in meiner iOS App zu kämpfen.Visual Constraints mit versteckten Ansichten

Ich habe vier UIViews. Man ist immer die „Header“ oder Draufsicht, und die anderen drei abwechselnd sichtbar darunter ist, wie folgt:

+-------------------+ 
| HeaderView  | 
+-------------------+ 
| View2|View3|View4 | 
+-------------------+ 

Nur einer von View2, View3 oder View4 zu einem Zeitpunkt, zu sehen ist, und die andere sind versteckt, wenn sie nicht benutzt werden.

nun mit regulären NSLayoutConstraints, ich bin in der Lage, es zu bekommen arbeiten wirklich gut:

  1. Alle Ansichten haben Einschränkungen für Führende und Marge Nachgestellte den Host-super-Ansicht übereinstimmen.
  2. HeaderView hat TopMargin, um Host-Super-View zu entsprechen.
  3. Alle Ansichten haben Einschränkungen für ihre Höhe. HeaderView ist 100 und View2, View3 und View4 sind 25, 50 und 75.
  4. View2, View3 und View4 haben alle Einschränkungen, die ihre obere Ebene auf HeaderView Bottom setzen.
  5. (I jede Unterseite für View2 begrenzt nicht kümmern, View3 oder View4 -. Ihre Höhen befestigt sind, und leerer Raum unter ihnen wird an anderer Stelle verwaltet)

Also, ich versuche zu konvertieren dies zu visuellen Einschränkungen. Hier ist, was ich bisher für horizontale Beschränkungen haben und es ist toll:

@"H:|-0-[HeaderView]-0-|" 
@"H:|-0-[View2]-0-|" 
@"H:|-0-[View3]-0-|" 
@"H:|-0-[View4]-0-|" 

Nun vertikale Beschränkungen sind, wo ich in Schwierigkeiten geraten:

Ich habe versucht, die folgenden:

@"V:|-0-[HeaderView(100)]-0-[View2(25)]-0-[View3(50)]-0-[View4(75)]" 

Und ich habe auch versucht, Splitting, dass bis:

@"V:|-0-[HeaderView(100)-0-[View2(25)]" 
@"V:|-0-[HeaderView(100)-0-[View2(50)]" 
@"V:|-0-[HeaderView(100)-0-[View2(75)]" 

Nun, das Problem ist, dass das vertikale Layout ist nie richtig - fast immer, View2, View3 oder View4 liegen direkt über HeaderView, nicht darunter.

Irgendwelche Vorschläge, wie Sie dies beheben und meine vertikalen Layouts korrigieren können?

Antwort

1

Versuchen Sie, wie diese,

V:[HeaderView(100)]-[View1(25)] 
V:[HeaderView(100)]-[View2(50)] 
V:[HeaderView(100)]-[View3(75)] 

Und stellen Sie sicher, dass Sie richtig views Parameter constraintsWithVisualFormat Methode setzen. Es sollte super view von Ihrem views sein, auf dem Sie Einschränkungen festlegen, oder es sollte angezeigt werden, mit wem Ihre Einschränkungen in Beziehung stehen.

Hope this helfen :)

+1

(100 shouldnt es sein (100) Kumpel ??? –

+0

Ja, das Tippfehler war !! Dank für Vorschlag .. :) – Lion

+0

Eine weitere Zweifel :) Arent bewerben Sie alle die 25 30 75 Höhenbeschränkung auf sameView View2, wenn die Anforderung war, es für View1, View2 und View 3 anzuwenden :) Ich weiß, dass das der Teil seiner Frage war, aber das ist falsch, nicht wahr :) Der Effekt ist, dass die Höhe von View2 sein wird 75 wo wie andere Höhe wird implizit so auf 0 gesetzt :) –

0

MarcWan,

Es ist nichts falsch in Constraint Ich glaube, wenn dies genau die Einschränkungen, die Sie verwendet haben Sie verpasst ']' in allen Zwängen.

dies versuchen,

@"V:|-0-[HeaderView(100)]-0-[View2(25)]-0-[View3(50)]-0-[View4(75)]" 
+0

nein, das war ein Tippfehler. es funktionierte immer noch nicht :( – MarcWan

+0

@marcwan: Haben Sie geschrieben HeaderView.translatesAutoresizingMaskIntoConstraints = false, View2.translatesAutoresizingMaskIntoConstraints = false, View3.translateAutoresizingMaskIntoConstraints = false und schließlich View4.translateAutoresizingMaskIntoConstraints = false –

+0

Yah, die obige Antwort von @lion hat völlig getan Der Trick: Ich will nur noch ein wenig mit deiner Antwort herumspielen und sehen, ob ich alles wieder in eine Zeile zurückbringen kann^_ ^ – MarcWan