Nsattributedstring superscript styling
Chcę indeksować wszystkie instancje znaku ® w bloku tekstu (Zastrzeżenia prawne, oczywiście;)), a domyślny sposób NSAttributedString
nie jest zbyt dobry.
Jeśli po prostu pozwolę znakowi być i użyję tylko niezmodyfikowanego NSString
, będzie on renderowany w tym samym rozmiarze co wielka litera i będzie umieszczony mniej więcej w punkcie bazowym. Jeśli dodam atrybut indeksu górnego do NSAttributedString
w następujący sposób:
[attrStr setAttributes:@{(NSString *)kCTSuperscriptAttributeName : @1} range:NSMakeRange(locationOfReg, 1)];
Znak jest usuwany z linii bazowej, jego rozmiar pozostaje niezmieniony, ale odstępy między wierszami są teraz wpływ, ponieważ podniesiony znak w przeciwnym razie ingerować w linii powyżej.
Do zilustrowania:
Stworzyłem ten obraz w Photoshopie, gdzie pożądana pozycja została osiągnięta poprzez zmniejszenie rozmiaru znaku i przesunięcie linii bazowej. Wiem, jak zmienić rozmiar czcionki w iOS, ale zmiana linii bazowej wydaje się trudniejsza. Jakieś sugestie, jak to osiągnąć?
Edit: przypuszczam, że mógłbym użyć atrybutu górnego jako sposobu na przesunięcie linii bazowej w górę. Teraz dobrze byłoby znaleźć sposób, aby uzyskać bieżący rozmiar czcionki, a następnie zmniejszyć go, aby umożliwić stosowanie tej samej metody na blokach tekstu o różnej wielkości.
3 answers
Następujący kod wydaje się działać:
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)];
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-03 19:00:14
Wersja Swift:
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))
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-18 07:54:34
Swift 4.2
W moim przykładzie chcę zapisać jedną instancję symbolu nieskończoności, aby tytuł mojej etykiety wyglądał tak:
let font = UIFont(name: "Helvetica", size: 14.0)
let attributedString = NSMutableAttributedString(string: "Solids(ΔE∞)•G7®", attributes: [NSAttributedStringKey.font : font!])
attributedString.setAttributes([NSAttributedStringKey.baselineOffset: -5], range: NSRange(location: 9, length: 1))
solidsLbl.attributedText = attributedString
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-03 11:36:15