Ändern Sie die Größe eines UILabel, um Platz für Platzhalter zu schaffen
Baue ich einen Bildschirm zum Scannen von barcodes, und ich benötigen, um einen durchscheinenden Bildschirm hinter einigen UILabels
um die Sichtbarkeit zu verbessern hellen hintergrund.
Hier ist, was der Bildschirm jetzt aussieht:
Ich bin Einstellung der Hintergrundfarbe auf der UILabel
zu Holen Sie sich die transluzenten Boxen. Ich habe auch eine benutzerdefinierte UILabel
Unterklasse, mir zu erlauben, einige der Abstand zwischen dem Rand der UILabel
und den text mit dieser Ansatz.
Wie Sie sehen können auf dem Bildschirm oben, die UILabel
nicht die Größe richtig zu nehmen, die Polsterung zu berücksichtigen. Die "Polsterung" verschiebt einfach den text ohne änderung der Breite der Beschriftung, wodurch der text abgeschnitten.
Beide diese Etiketten enthalten text, beliebige Längen haben, und ich wirklich brauchen, die UILabel
zu dynamisch ändern.
Was UILabel
Methode kann ich überschreiben, um erhöhen Sie die Breite der Beschriftung und der Faktor in der Polsterung?
InformationsquelleAutor der Frage Josh Earl | 2014-01-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist ein label-Klasse berechnet die Größen richtig. Die gepostet code ist in Swift 3, aber Sie können auch herunterladen Swift 2 oder Objective-C Versionen.
Wie funktioniert es?
Durch die Berechnung der richtigen 'textRect' alle
sizeToFit
- und auto-layout funktioniert wie erwartet. Der trick ist, zuerst subtrahieren Sie die Abstände, berechnen dann die original-Etikett Grenzen, und schließlich fügen Sie die Einschübe wieder.- Code
Optional: Interface Builder unterstützen
Wenn Sie wollen, um das setup texteinschübe in storyboards können Sie die folgende Erweiterung zu ermöglichen, Interface Builder-support:
Nun können Sie bequem Ihre setup-Einsätze in IB und dann drücken Sie einfach ⌘= anpassen der label-Größe zu passen.
Haftungsausschluss:
Alle code ist in der public domain. Tun, als Sie bitte.
InformationsquelleAutor der Antwort Nikolai Ruhe
Hier ist eine schnelle version des UILabel Unterklasse (gleich wie @Nikolai-Antwort) , schafft eine zusätzliche Polsterung um den text von einem UILabel:
InformationsquelleAutor der Antwort Klaas
Hier ist die C# - version (nützlich für Xamarin), basierend auf Nikolai-code :
InformationsquelleAutor der Antwort Pataphysicien
In Ergänzungen Nikolai Ruhe's Antwort, die Sie benötigen, um ungültig intrinsic content size für autolayout, um richtig zu berechnen den Größe ändert. Würden Sie bemerken das Problem, wenn Sie ändern edgeInsets über den application-lifecycle:
InformationsquelleAutor der Antwort Max S.
Hier ist ein Beispiel dafür, was ich für eine einfache 10-Einheit-Polsterung auf der linken und rechten Seite der Etiketten mit abgerundeten Ecken. Nur stellen Sie den label-text zu zentrieren, den es selbst machen und es ist Klasse IndentedLabel und der rest kümmert sich um sich selbst. Zum ändern der Polsterung nur nach oben oder unten skaliert rect.Größe.Breite += (x)
InformationsquelleAutor der Antwort blackops
Hier ist eine schnelle, hacky Weg, es zu tun, können Sie verstehen, mehr schnell. Es ist nicht so robust wie Nikolai ist, aber es bekommt den job getan. Ich Tat dies, als ich versuchte zu passen zu meinem text in meinem UILabel innerhalb einer UITableViewCell:
let messageTextSize: CGSize = (messageText as NSString).sizeWithAttributes([
NSFontAttributeName: UIFont.systemFontOfSize(14.0)])
cell.widthConstraint.constant = messageTextSize.width + myInsetsOrWhatever
Habe ich noch nicht ausgiebig getestet, noch, haben Sie vielleicht zu spielen, um mit der genauen CGFloat Werte, die Sie hinzufügen. Ich fand, dass die richtige Größe ist nicht genau das, Breite und Abstände; es ist ein wenig größer als das. Dies stellt sicher, dass die Breite des UILabel wird immer mindestens die text-Größe oder größer.
InformationsquelleAutor der Antwort Huy-Anh Hoang
Hinzufügen @Pataphysicien Antwort oben für Xamarin forms ist dies, wie Sie verwenden die UIEdgeableLabel:
InformationsquelleAutor der Antwort Adil H. Raza