Oben ausrichten der text in verschiedenen Größen in einem UILabel
Wie oben-richten Sie den text in verschiedenen Größen in einem UILabel? Ein Beispiel ist die top-Angleichung kleineren cent-Betrag mit noch größeren dollar-Betrag, der in Preis Banner.
UILabel in iOS6 unterstützt NSAttributedString
die es mir erlaubt haben, den text in verschiedenen Größen in der gleichen UILabel. Aber es scheint nicht zu haben, ein Attribut für top-text ausrichten. Was sind die Optionen, um dies zu implementieren? Es scheint mir, dass die Bereitstellung eine benutzerdefinierte Zeichnung Logik zu tun, top-Ausrichtung, basierend auf einem benutzerdefinierten zugeschrieben string key ist vielleicht das beste, aber ich habe keine Ahnung, wie man über es.
Du musst angemeldet sein, um einen Kommentar abzugeben.
War ich in der Lage zu erreichen, das gewünschte Ergebnis mit einem einzigen label.
Mit ein wenig Mathematik können Sie den Versatz der Grundlinie des kleineren text für die Erreichung Ihrer gewünschten Ergebnis.
Objective-C
Swift
Daraus ergibt sich die folgende:
Das problem mit dem Versuch zu tun, diese einfach durch die Angleichung der Ursprung von frames ist, dass "normale" Zeichen in der Regel am Ende mit einigen extra-Polsterung um Sie herum, weil das label für alle der schriftart von Zeichen, einschließlich derjenigen, die wird groß Aufsteiger und lange Unterlängen. Sie werden bemerken, das Bild, das Sie gepostet, dass wenn die kleine "99" wurden in einem separaten label gesetzt wurde, den gleichen Ursprung hat wie die grösseren text, es wäre zu hoch, weil der dollar-Zeichen den obersten Punkt.
Glücklicherweise
UIFont
gibt uns alle Informationen, die wir brauchen, um dies richtig tun. Wir Messen müssen, die leer seilwinde Raum die Etiketten sind mit und anpassen der relativen Positionierung zu berücksichtigen, für die es, wie so:(Dieser code setzt Voraus, Sie haben zwei label-Eigenschaften mit dem Namen
bigTextLabel
undsmallTextLabel
jeweils)Edit:
Tut dies ohne zwei Etiketten ist ziemlich ähnlich. Sie können eine benutzerdefinierte UIView-Unterklasse, und ziehen
NSAttributedStrings
mit den-drawInRect:options:context:
Methode (stellen Sie sicher, dass SieNSStringDrawingUsesLineFragmentOrigin
in die Optionen). Die Mathematik für die Arbeit der top-Ausrichtung sollte die gleiche, der einzige Unterschied ist, bekommen Sie die schriftart aus der attributierten string über dieNSFontAttributeName
- Attribut, nicht das label. Die WWDC 2012 video-on zugeschrieben string Zeichnung ist eine gute Referenz für diese.drawInRect:options:context
ist NSAttributedString Instanz-Methode. Wie kann ich festlegen, verschiedene Rahmen zu zeichnen, für verschiedene Teile des NSAttributedString?bigFont
zu jeder anderen Schrift, die (Auch plain old "Avenir") funktioniert alles wie erwartet. Ich habe einen code zum zeichnen der Grundlinie und versalhöhe und diese waren die Ergebnisse, "Avenir-Mittel": i.imgur.com/Z8oin2S.png, "Avenir": "i.imgur.com/z74WxEC.png.Das ist schade. Ich habe nicht genug Ruf, um kommentieren Sie die Antwort, dass ich auch nach ein wenig Modifikation.
Ich möchte nur darauf hinweisen, dass die Nutzung
smallfont
für Cent stattfont
, die möglicherweise an einem Tippfehler.Unten ist der geänderte code
Ein möglicher Ansatz wäre, um das Etikett um die genaue Größe des Textes, die Sie setzen in.
Sehen diese ähnlich ALSO post für mehr details.