2016-05-12 15 views
0

Ich habe zwei UILabels:Wie kann ich zwei UILabels nebeneinander erscheinen lassen?

  let wordLabel    = UILabel(frame: CGRectMake(0,0,(self.view.frame.width - 30)/2,0)) 
      wordLabel.text    = word.valueForKey("sanskrit") as? Stringsize: 16) 
      wordLabel.numberOfLines  = 0 
      wordLabel.sizeToFit() 
      wordLabel.translatesAutoresizingMaskIntoConstraints = false 

      let englishWordLabel   = UILabel(frame: CGRectMake(wordLabel.frame.width + 10,0,labelWidth,0)) 
      englishWordLabel.text   = word.valueForKey("english") as? Stringsize: 16) 
      englishWordLabel.numberOfLines = 0 
      englishWordLabel.sizeToFit() 
      englishWordLabel.lineBreakMode = .ByWordWrapping 
      englishWordLabel.translatesAutoresizingMaskIntoConstraints = false 

Grundsätzlich habe ich eine Reihe von diesen in der Zelle eines UITableView gestapelt.

Um es zu versäubern, wollte ich jedem UILabel etwa die Hälfte des Platzes geben (minus ein wenig Padding). wordLabel auf der linken Seite. englishWordLabel auf der rechten Seite.

Was mir momentan in den Sinn kommt, ist, dass wenn ich die sizeToFit Zeile entferne, dann funktioniert das Sizing, aber mein gesamtes wordLabel fehlt komplett. Ich kann einen Rahmen hinzufügen, um es in der Vorschau anzuzeigen, oder die Ansichtshierarchie debuggen, und es fehlt vollständig. Add sizeToFit, und mein Etikett erscheint, aber die Breite wird ignoriert (dieser Teil verstehe ich).

Ich habe über das Hinzufügen von Einschränkungen nachgedacht, um diesen Job zu erledigen, aber ich bin mir nicht sicher, ob das die beste Strategie ist.

Was würden Sie empfehlen, um dies zu erreichen?

+1

Sie benötigen automatisches Layout. Der einfachste Weg für Sie ist eine horizontale 'UIStackView' Einstellung auf' Fill Equally'; Dies ermöglicht es Ihnen, zwei Etiketten mit der gleichen Breite Seite an Seite mit im Grunde keine Mühe zu haben. Sie können auch die Polsterung anpassen. Sie können auch mehrere "Zeilen" des Labels "UIStackView" in ein vertikales "UIStackView" einbetten. –

+0

Ah cool @RoboticCat. Danke für den Hinweis. Was ist "Auto-Layout" genau? – Trip

+1

Einer der Gründe für das Layout von Ansichten und View-Controllern in IB ist, dass Sie die Constraints zur Entwurfszeit korrigieren können, anstatt den gesamten Code-> Kompilieren-> Test-> Code-Zyklus durchzugehen. In IB können Sie Ihre Ansichten und Controller für jedes Gerät in jeder Ausrichtung zur Entwurfszeit anzeigen. IB wird auch Fehler und Warnungen für Einschränkungen anzeigen, die nicht funktionieren. Aus irgendeinem Grund verstehen einige Entwickler Auto-Layout nicht (und sicherlich nicht verstehen, seine Macht), so schlage ich vor, Sie zuerst ein Tutorial zu überprüfen. –

Antwort

2

Wie @Robotic Cat erwähnt, scheint es, was Sie suchen, ist Auto Layout.

Mit dem automatischen Layout können Sie Einschränkungen für Ansichten programmgesteuert und/oder im Storyboard festlegen. Mit diesen Einschränkungen können Sie adaptive Layouts basierend auf Bildschirmgrößen, Ansichtsgrenzen/-rahmen, relativer Breite/Höhe und vielen anderen Dingen erstellen. Um Ihnen den Einstieg zu erleichtern, habe ich ein Ray Wenderlich-Tutorial über Auto-Layout sowie hilfreiche Apple-Dokumentation bereitgestellt.

+0

Ich mache mein Setup programmgesteuert. Macht das automatische Layout noch Sinn? – Trip

+0

Wenn alles programmatisch ist, würde ich vorschlagen, zumindest Einschränkungen für Ihre Ansichten im Code festzulegen. – ZGski

+0

Rechts. Das habe ich. Aber welche Art von Einschränkungen dann? Wie ich in meiner Frage beschrieben habe, wenn ich Einschränkungen setze, geht alles überall hin. Es scheint keine Logik zu geben. Ich habe die Links gelesen, die Sie in den letzten paar Monaten erwähnt haben. Meine Intuition lässt mich die Breite und den führenden Platz schreiben, aber dann sitzen meine beiden UILabels einfach übereinander. – Trip

Verwandte Themen