2016-04-13 7 views
0

Ich muss Schaltflächen programmgesteuert basierend auf der Anzahl der abgerufenen Werte erstellen, und jede Schaltfläche muss Breite haben, die relativ zu ihrer Textlänge ist. Meine aktuelle Implementierung hat eine feste Breite mit X-Position, die ebenfalls in fester Länge erhöht wird.Swift 2.1 - Erstellen dynamischer Schaltflächen mit einer Breite relativ zur Textlänge

Was ist der Prozess um dies zu erreichen, damit ich Buttons wie angehängten Screenshot haben kann?

for var i = 0; i < self.category.count; i++ { 
    let frame1 = CGRect(x: 0 + (i * 45), y: 20, width: 80, height: 40) 
    let button = UIButton(frame: frame1) 
    button.setTitle("\(category[i].name!)", forState: .Normal) 
    button.backgroundColor = UIColor.blackColor() 
    self.categoryScrollView.addSubview(button) 
} 

enter image description here

+0

Wenn Sie Layout-Constraints anstelle des Rahmens verwenden, wird die Größe der Schaltfläche automatisch angepasst und nur ein FYI: Dieser Typ von for-Schleife ist veraltet. – PeejWeej

Antwort

3

Nachdem Sie den Text auf die Schaltfläche setzen, verwenden Sie

button.sizeToFit() 

dann die Breite der Schaltfläche lesen und eine entsprechende Anzahl, um es hinzuzufügen (diese Zahl wird für alle Tasten gleich sein unabhängig von der Textlänge und gibt Ihnen die gewünschten Ergebnisse

Alternativ können Sie Padding hinzufügen, in diesem Fall müssen Sie nur die Tannen tun t Schritt.

+0

Danke. Wie kann ich die Breite eines Buttons lesen? Ich denke, der beste Weg ist die Verwendung von 'button.sizeToFit()' und das Hinzufügen von Padding. Wären Sie in der Lage, Code anzuzeigen, der Auffüllen hinzufügt? Und ich bin mir nicht sicher, ob CGRect noch notwendig ist. Und es ist immer noch eine Frage, sie horizontal (x-Position) mit konsistenter Marge auszubreiten. –

+1

für Padding versuchen 'button.contentEdgeInsets = UIEdgeInsetsMake (10,10,10,10)', Spielen Sie mit der Zahl, um gewünschte Ergebnisse zu erhalten. Sie müssen immer noch einen Frame/cgrect am Anfang definieren, wie Sie jetzt sind, und später wird der Code ihn richtig anpassen. – Kashif

+0

contentEdgeInsets fügt Padding innerhalb der Breite einer Schaltfläche hinzu, wodurch der gesamte Text der Schaltfläche "..." wird oder kein Text angezeigt wird. Es sieht so aus, als gäbe es keine Outset-Methode. Noch ein langer Weg, um das gewünschte Ergebnis zu erzielen. Und wie cam bekomme ich die Breite eines Buttons, nachdem ich 'sizeToFit()' gemacht habe? –

Verwandte Themen