2016-11-22 4 views
2

Ich habe eine UILabel, die Text ändert. Es hat eine Hintergrundfarbe, die ich immer die gleiche Breite haben möchte, aber für seine Höhe zu ändern, wenn es benötigt wird, um den Text anzupassen. Weiß jemand, wie ich das machen könnte?Programmatisch feste Breite, dynamische Höhe UILabel?

Hier ist, was ich versucht habe:

label.numberOfLines = 0 
    label.center = self.view.center 
    label.textAlignment = .center 
    label.widthAnchor.constraint(equalToConstant: 50.0).isActive = true 
    label.sizeToFit() 
+0

Haben Sie schon einen Code geschrieben? Es wäre hilfreich zu sehen, was Sie versucht haben. – Wez

+1

Entschuldigung, hinzugefügt – MarksCode

+0

Initialisieren Sie das Etikett mit einem Rahmen? – Wez

Antwort

-1

Betrachtet man Auto-Layout verwenden und möchten Ihr Etikett auf einen Blick zu verankern darüber, können Sie die oben setzen konnte, links und rechts Einschränkungen dieses Label stellen Sie dann die UILabel ‚s numberOfLines auf 0

+0

Es ist sehr möglich, unteren Einschränkungen mit einer mehrzeiligen UILabel – Wez

+0

verwenden Auch sieht es nicht aus wie das OP mit Autolayout. – Wez

+0

@Wezly in der letzten Bearbeitung sieht aus wie er auch mit Auto-Layout versucht –

0

Sie sollten wahrscheinlich auf autolayout etwas zu lesen tun und lernen, wie Sie Ihre Ansichten mit ihm zu strukturieren, aber von dem, was ich kann es sammeln sieht aus wie Sie das Etikett zu wollen:

  • in der Mitte des Bildschirms
  • haben eine feste Breite
  • haben eine Hintergrundfarbe
  • erweitern zu passen ihre Inhalt vertikal

let label = UILabel() 
label.translatesAutoresizingMaskIntoConstraints = false 
label.backgroundColor = UIColor.greenColor() 
label.numberOfLines = 0 
label.textAlignment = .Center 
label.text = "This is\nsome multiline\nlabel\nwith a background\n colour" 
self.view.addSubview(label) 

let width = NSLayoutConstraint(item: label, attribute: .Width, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: 50) 
let centerX = NSLayoutConstraint(item: label, attribute: .CenterX, relatedBy: .Equal, toItem: self.view, attribute: .CenterX, multiplier: 1, constant: 0) 
let centerY = NSLayoutConstraint(item: label, attribute: .CenterY, relatedBy: .Equal, toItem: self.view, attribute: .CenterY, multiplier: 1, constant: 0) 

self.view.addConstraints([width, centerX, centerY]) 

Der obige Code erzeugt, ein grünes Etikett mit Auto-Layout, gibt es eine screenshot here.

Die Verwendung von numberOfLines = 0 stellt sicher, dass die Ansicht weiß, dass das Etikett erweitert werden kann, um seinen Inhalt anzupassen.

Die Layoutbeschränkungen sollten selbst erklärend sein, wenn Sie sie lesen, legen wir die Breite des Labels auf 50 fest, dann setzen wir die X- und Y-Mittelwerte auf die Ansicht, der wir das Label hinzugefügt haben.

Sind Sie danach? - Wenn nicht, könnten Sie Ihre Frage aktualisieren, um ein Mock-up-Bild von dem, was Sie versuchen, aufzunehmen.

Verwandte Themen