Devo fare pedici per le formule chimiche (H2O, Na^2 +, ecc.)?Come creare pedici e apici usando NSAttributedString?
Questo è possibile a che fare con NSAttributedString, o c'è un/modo alternativo più facile fare gli indici?
Devo fare pedici per le formule chimiche (H2O, Na^2 +, ecc.)?Come creare pedici e apici usando NSAttributedString?
Questo è possibile a che fare con NSAttributedString, o c'è un/modo alternativo più facile fare gli indici?
Ciò è possibile a che fare con NSAttributedString
. La costante di attributo che stai cercando dipende dalla tua piattaforma. Per Mac OS X è NSSuperscriptAttributeName
e su iOS è kCTSuperscriptAttributeName
. Passa a un valore negativo per pedice.
L'unica avvertenza è che UILabel
su iOS non può disegnare NSAttributedString
s (ancora, incrociamo le dita per iOS 6). Dovresti disegnare il testo usando il Core Text o trovare qualche sostituto di terze parti per UILabel
che può disegnare un NSAttributedString
.
Ecco quello che ho fatto in iOS 6. In primo luogo aggiungere il CoreText e quadri QuartzCore. Poi importazione:
#import <QuartzCore/QuartzCore.h>
#import <CoreText/CTStringAttributes.h>
#import <CoreText/CoreText.h>
ho fatto una piccola funzione che immette una pianura NSString ed esporta una NSMutableAttributedString con l'ultimo carattere in apice. Questo può essere modificato per consentire l'impostazione di apice o pedice, cambiare il valore di kCTSuperscriptAttributeName su -1. Inoltre è possibile aggiungere una variabile per specificare dove inserire l'apice nella stringa. In questo momento assume solo la fine della stringa.
- (NSMutableAttributedString *)plainStringToAttributedUnits:(NSString *)string;
{
NSMutableAttributedString *attString = [[NSMutableAttributedString alloc] initWithString:string];
UIFont *font = [UIFont systemFontOfSize:10.0f];
UIFont *smallFont = [UIFont systemFontOfSize:9.0f];
[attString beginEditing];
[attString addAttribute:NSFontAttributeName value:(font) range:NSMakeRange(0, string.length - 2)];
[attString addAttribute:NSFontAttributeName value:(smallFont) range:NSMakeRange(string.length - 1, 1)];
[attString addAttribute:(NSString*)kCTSuperscriptAttributeName value:@"1" range:NSMakeRange(string.length - 1, 1)];
[attString addAttribute:(NSString*)kCTForegroundColorAttributeName value:[UIColor blackColor] range:NSMakeRange(0, string.length - 1)];
[attString endEditing];
return attString;
}
Ora quando voglio usarlo posso effettuare le seguenti operazioni per metterlo in un UITextField:
NSString *qlwUnitsPlainText = @"m3";
self.quantityLoadWeightUnits_textField.attributedText = [self plainStringToAttributedUnits:qlwUnitsPlainText];
Spero che questo aiuta qualcun altro, non ci sono molti esempi là fuori!
Potete per favore dare un'occhiata a questa parte di attributoString: https://gist.github.com/mladjan/6663691 Non voglio rendere apice :( – dormitkon
Non dovresti che i parametri NSMakeRange siano firstPosition e length (invece di firstPosition e lastPosition) Nell'esempio il lettore può essere fuorviante – dwbrito
come posso rimuoverlo –
si può anche fare quanto segue se si vuole rendere un pulitore litle
NSDictionary *attr = @{ NSFontAttributeName: smallfont,
(NSString*)kCTSuperscriptAttributeName: @1 }
NSRange fabricWeightRange = NSMakeRange(fabricWeight.location + 2, 1);
[subKeyString setAttributes:attr range:fabricWeightRange];
Su iOS, avevo perso il kCTSuperscriptAttributeName costante ma ha avuto buoni risultati con la dimensione del carattere e "base". Ti dà un po 'più di controllo troppo per i font meno ubbidienti:
+ (NSAttributedString *)attributedStringForText:(NSString *)normalText andSuperscript:(NSString *)superscriptText textSize:(CGFloat)textSize
{
UIFont *normalFont = [Styles mainFontWithSize:textSize];
UIFont *superFont = [Styles mainFontWithSize:textSize/2];
NSMutableAttributedString *finalStr = [[NSMutableAttributedString alloc] initWithString:normalText attributes:@{NSFontAttributeName: normalFont}];
NSAttributedString *superStr = [[NSAttributedString alloc] initWithString:superscriptText attributes:@{NSFontAttributeName: superFont, NSBaselineOffsetAttributeName:@(textSize/2)}];
[finalStr appendAttributedString:superStr];
return finalStr;
}
Grazie mille @hari – Ramdy
cosa sono 'Stili' qui? –
@AadilKeshwani Solo una classe statica per centralizzare caratteri, dimensioni, colori e altri stili relativi all'app. –
Per valore d'uso pedice per kCTSuperscriptAttributeName come @ -1.
Secondo il documento
@discussion valore deve essere un CFNumberRef. Predefinito è int valore 0. Se supportato dal carattere specificato, un valore 1 attiva pedici e un valore di -1 consente subscripting.
extern const CFStringRef kCTSuperscriptAttributeName CT_AVAILABLE (10_5, 3_2);
Example- [lblHeader setText:@“Headers [Alpha1 – text”];
NSMutableAttributedString *headerSubscript = [[NSMutableAttributedString alloc]initWithAttributedString: lblHeader.attributedText];
[headerSubscript addAttribute:(NSString *)kCTSuperscriptAttributeName value:@-1 range:NSMakeRange(14,1)];
[lblHeader setAttributedText:headerSubscript];
@Bhargav Rao È rapido, ecco perché ho scritto questa risposta. –
Grazie. Puoi usare kCTSuperscriptAttributeName per creare anche gli apici? – Mahir
Sì, come ho affermato, un valore positivo è per gli apici. Un valore negativo per i pedici. –
Scusa, non so come mi sia mancato. Grazie ancora. – Mahir