2014-01-28 10 views
30

Ich möchte alle Instanzen von ® Zeichen in einem Textblock (legaler Disclaimer, natürlich;)) und der Standard Weg NSAttributedString ist nicht sehr gut.NSAttributedString hochgestelltes Styling

Wenn ich nur das Zeichen sein lasse und nur unmodified NSString verwende, wird es die gleiche Größe wie ein Großbuchstabe gerendert und ungefähr an der Basislinie platziert. Wenn ich das hochgestelltes Attribut NSAttributedString hinzufügen wie folgt:

[attrStr setAttributes:@{(NSString *)kCTSuperscriptAttributeName : @1} range:NSMakeRange(locationOfReg, 1)]; 

Der Charakter der Basislinie abgehoben wird, ist seine Größe unverändert, aber der Zeilenabstand ist jetzt betroffen, da der erhöhte Charakter sonst auf der Linie oben eindringen würde. Um

veranschaulichen:

variants of (R)

Ich habe dieses Bild in Photoshop, wo die gewünschte Position, die durch die Verringerung der Größe des Zeichens und Verschieben des Basislinie erreicht war. Ich weiß, wie man die Schriftgröße in iOS ändert, aber das Ändern der Grundlinie scheint komplizierter. Irgendwelche Vorschläge, wie man das erreicht?

Edit: Ich nehme an, ich könnte das hochgestellte Attribut als eine Möglichkeit verwenden, um die Grundlinie nach oben zu verschieben. Nun wäre es gut, einen Weg zu finden, die aktuelle Schriftgröße zu erhalten und sie anschließend zu reduzieren, damit dieselbe Methode auch für Textblöcke unterschiedlicher Größe verwendet werden kann.

Antwort

64

Der folgende Code scheint den Trick zu tun:

UIFont *fnt = [UIFont fontWithName:@"Helvetica" size:20.0]; 

NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:@"GGG®GGG" 
                        attributes:@{NSFontAttributeName: [fnt fontWithSize:20]}]; 
[attributedString setAttributes:@{NSFontAttributeName : [fnt fontWithSize:10] 
            , NSBaselineOffsetAttributeName : @10} range:NSMakeRange(3, 1)]; 

enter image description here

+0

Kann nicht machen es in iOS arbeiten 6. Können Sie seinen Ersatz sorgen für iOS 6? –

+0

Nur unter iOS 7 getestet und Deklaration für fnt hinzugefügt, die nicht abstürzt. –

+0

@AlexZavatone danke! Entschuldigung, musste den Kommentar entfernen, da es nicht wirklich relevant ist;) – kovpas

6

Swift Version:

let fnt = UIFont(name:"Helvetica", size:20.0) 
let attributedString = NSMutableAttributedString(string:"GGG®GGG", attributes:[NSFontAttributeName : fnt!]) 
attributedString.setAttributes([NSFontAttributeName : fnt!.fontWithSize(10), NSBaselineOffsetAttributeName: 10], range: NSRange(location: 3, length: 1))