2013-11-01 16 views
9

Ich habe ziemlich einfache Anforderungen, wo zwei Etiketten horizontal zentriert werden müssen. Also, ich habe sie ausgewählt und wählen Editor-> Ausrichtung-> horizontal zentrieren. Dann wurde beiden Containern der obere Randbereich hinzugefügt. Ich brauche auch die Etiketten, um hinsichtlich der Inhaltsgröße zu schrumpfen/wachsen. IB zeigt jedoch Fehler und mehrere Warnungen. Ich könnte die Labels schrumpfen/wachsen lassen, indem ich einen Pin zwischen ihnen hinzufüge (horizontaler Abstand), aber sie werden in diesem Fall nicht zentriert sein. Hier sind die Screenshots:Wie werden zwei Etiketten horizontal zentriert?

enter image description here

hier sind die Fehler und Warnungen:

enter image description here

UPDATE TheRaven einen interessanten Vorschlag gab für Dummy-Ansicht zu verwenden, um es horizontal zentriert und Pinning zwei Etiketten zu ihm. Ich habe alle vorhandenen Einschränkungen entfernt, diese Dummy-Ansicht hinzugefügt und X + Y-Mittelachsen zentriert. Dann pinned zwei Etiketten zu ihm (hinzugefügt horizontale Leerzeichen Einschränkungen). Allerdings habe ich immer noch eine Reihe von Fehlern und Warnungen erhalten:

enter image description here enter image description here

UPDATE2 einfach die Frage zu aktualisieren, aber immer noch keine gültige Antwort gefunden. @Theraven Workaround funktioniert für iPhone4, iPhone4S, iPhone5 und iPhone5S, es ist jedoch keine echte Zentrierung, sondern eher ein Workaround. Daher funktioniert es für iPhone6 ​​und iPhone6 ​​Plus nicht, da führende und nachgestellte Leerzeichen korrigiert werden und nicht automatisch für größere Breite angepasst werden.

+0

'einfache Anforderungen, bei denen zwei Beschriftungen horizontal zentriert werden müssen '- möchten Sie Ihre Ansicht in zwei Teile (links und rechts) und dann die Beschriftungen in jedem Teil zentriert? –

+0

@ArkadiuszHolko ja. – Centurion

+0

Dies ist immer noch mehrdeutig. Möchten Sie den gleichen Abstand zwischen der linken Kante <-> ersten Etikett <-> zweiten Etikett <-> rechten Rand. Oder gleicher Abstand zwischen linker Kante <-> erstes Etikett <-> Bildschirmmitte und Bildschirmmitte <-> zweites Etikett <-> rechte Kante. Der Unterschied, der Raum in der Mitte ist größer im zweiten Szenario. Sobald Sie klären, werde ich meine Antwort beheben. – theraven

Antwort

4

Um dies zu lösen, verwenden Sie ein leeres UIView zwischen Ihren beiden Etiketten und zentrieren Sie es horizontal. Dann fixieren Sie die beiden Beschriftungen auf jeder Seite der zentrierten leeren Ansicht. Es ist üblich, Spacer-Ansichten wie diese im Auto-Layout zu verwenden.

+0

Danke, versuchte deinen Vorschlag, aber ohne Glück. Siehe aktualisierte Antwort. – Centurion

+0

@Centurion aktualisiert * Antwort * ..? –

+0

@TJ Theraven-Antwort funktioniert nur, indem man konstante Abstände festlegt (Leerzeichen an die zentrierte Trennungsansicht anfügt (für die linke Ansicht) und Leerzeichen an das zentrierte Trennzeichen anfügt (für die rechte Ansicht). Diese Problemumgehung funktioniert für iPhone4, iPhone4S, iPhone5 und iPhone5S. es ist jedoch keine echte Zentrierung, es ist nur ein Workaround. Daher für iPhone6 ​​und iPhone6 ​​Plus funktioniert nicht als führende und nachfolgende Leerzeichen sind Konstanten und wird nicht automatisch die Größe ändern. – Centurion

0

Ich habe nicht wirklich verstanden, was Sie tun möchten.

Der Fehler, den Sie erhalten (im ersten Screenshot) ist, dass Sie die Einschränkung für die x-Position der Etiketten fehlt.

Für UILabel müssen Sie Constraint sowohl für y als auch für x Position in Bezug auf die Containeransicht haben, wenn Sie beide ausgewählt haben und Editor-> align-> center horizontal wählen, sagen Sie einfach label1.center.x = label2 .center.x. Sie müssen noch sagen, wo sie in der Containeransicht sein werden, Sie haben den oberen Platz zum Container hinzugefügt, also haben Sie die y-Position, aber Sie haben nicht gesagt, wo die x-Position sein soll.

sagte Sie

Ich habe ziemlich einfach Anforderungen, bei denen zwei Etiketten horizontal zentriert werden müssen

Aber wo sollten sie in Bezug auf ihre Behälter sein?

dank

+0

Dies stellt keine Antwort auf die Frage.Um Kritik zu kritisieren oder um Klärung von einem Autor, hinterlassen Sie einen Kommentar unter ihrem Beitrag - Sie können immer Ihre eigenen Beiträge kommentieren, und wenn Sie genügend [Ruf] (http : //stackoverflow.com/help/whats-reputation) Sie können [jeden Beitrag kommentieren] (http://stackoverflow.com/help/privileges/comment). –

+0

Danke! Ich habe gerade erst angefangen, und ich wollte wirklich nur einen Kommentar hinterlassen, aber ich konnte nicht, weil ich nicht genug Reputation habe. Aber ich denke, dass meine Antwort immer noch einen gewissen Wert hat, weil ein Teil der Frage über die Fehler war er bekommt .. trotzdem bekomme ich was du sagst, danke! – oren

+0

@oren Bitte lesen Sie zuerst die Frage. Stellen Sie sich vor, Sie teilen den Bildschirm vertikal (linke Bildschirmhälfte und rechte Bildschirmhälfte), und Sie benötigen die linke Beschriftung in der linken Bildschirmhälfte und die rechte Beschriftung in der rechten Bildschirmhälfte. Eine gute Antwort ist diejenige, die Sie bereits selbst versucht haben. – Centurion

1

ich die Idee nicht wirklich wie eine andere Ansicht nur aus Gründen der estethic hinzuzufügen.

Eine weitere Alternative besteht darin, die linke Ansicht horizontal zu zentrieren und horizontal die rechte Ansicht eines großen X mit der linken zu teilen.

Dann geben Sie der horizontalen Ausrichtung der ersten Ansicht einen negativen Wert gleich der ersten Ansichtsbreite plus der halben Ansichtsentfernung. Oder verwenden Sie Multiplikatoren wie in einem vorherigen Kommentar.

Aber das funktioniert nur mit Ansichten mit fester Breite ich denke.

+0

Wie "um die rechte Ansicht von einem X mit dem linken X" zu trennen? –

8

Sie können beide Beschriftungen zu einer anderen Ansicht hinzufügen, z. B. eine Containeransicht. Dann müssen Sie dieses horizontal zentrieren und die notwendigen Einschränkungen hinzufügen. Um das enthaltende UIView hinzuzufügen, können Sie beide Etiketten auswählen, gehen Sie zu Editor -> Embed In -> View.

Dann müssten Sie Einschränkungen hinzufügen, damit die enthaltene Ansicht den beiden Labels entspricht. So etwas wie folgt aus:

erstes Etikett (linke):

  • Raum Führende
  • oben und unten Raum Super zu Super
  • Horizontaler Abstand zum nächsten Etikett

Zweites Etikett:

  • Tr kranker Raum Super
  • oben und unten Super (oder oben ausgerichtet mit dem ersten)

Dann wird die Ansicht enthält, sollte die Größe als die beiden Etikett passen. Dann müssen Sie nur die obere Offset-Abhängigkeit für diese Containeransicht und eine horizontale Ausrichtung in der übergeordneten Ansicht hinzufügen.

Auf diese Weise wird die umschließende Ansicht so erweitert, dass sie sowohl die Beschriftungen als auch den Abstand zwischen ihnen berücksichtigt und immer in der übergeordneten Ansicht zentriert ist.

Ich habe einen Screenshot meiner Testbedingungen gemacht, falls es Ihnen mehr hilft.

The constraints for the left side label

Right-side label

Hoffnung das war, was Sie suchen.

+0

Ja, es ist ein gültiger Ansatz, erfordert jedoch redundantes containerView. So habe ich ähnliche Sachen gemacht, lange bevor das Auto-Layout auftauchte. – Centurion

0

Die Verwendung von Spacer-Ansichten ist die bestmögliche Lösung, die ich herausfinden konnte, obwohl sie für den Entwickler hässlich aussieht. Der Benutzer würde nicht einmal wissen, was hinter den Kulissen vor sich geht und sobald Sie den Abstandhalter UIView haben, können Sie ihn immer wieder verwenden.

0

Verwenden Sie zentriert UIStackView als Container für zwei Etiketten mit einem Abstand erforderlich.

Verwandte Themen