我看到NSAttributedString具有上標的特定屬性,但我找不到一個下標。使用NSAttributedString創建下標字符的一般做法是什麼?如何使用NSAttributedString創建下標
示例:H2O
我看到NSAttributedString具有上標的特定屬性,但我找不到一個下標。使用NSAttributedString創建下標字符的一般做法是什麼?如何使用NSAttributedString創建下標
示例:H2O
NSSuperscriptAttributeName
嘗試具有負值。
如果做不到這一點,困難的方法是用字符串中的[ο12 23 45 46]替換[]字符。
我在NSMutableAttributedString中遇到了下標/上標一段時間,因爲最基本的解決方案需要爲每個想要輸入下標的字符輸入一個NSRange。當然有更自動的做事方式?
嗯,是的,但它需要一點點的工作。
我的方法是通過用%符號括起要改變的文本,然後在應該進行什麼類型的字體調整的信息中指示在NSString中被下標,上標,斜體等等的字符。 '在第二個粒子上的力由f-subscript-b給出'將在我的方案中寫爲「第二個粒子上的力由sb%給出」。
然後我使用方便的方法:
NSArray *substrings = [string componentsSeparatedByString:@"%"];
字符串砍到由%的跡象,例如分隔子串
@「Hello%& Bhow are you you?」 - >包含元素的數組:@「Hello」,@「& Bhow are」,@「你?」
然後我檢查數組中每個元素的第一個字符,看看它是否包含&標記,我用它來表示下一個字符將是B =粗體,S =上標,I =斜體等。
所以,在上面的例子中,子@「& Bhow是」旨在@轉換成黑體字符串‘如何’,並輸入‘你好%& Bhow是%嗎?’是打算轉換成「你好你好嗎?」。
所有的字體修改都使用NSMutableAttributedString及其關聯的方法執行,最後所有的NSMutableAttributedString子字符串都可以使用像appendAttributedString這樣的方法粘貼回來。
如果任何人的興趣,我的代碼如下:
-(void) appendFontString:(NSMutableAttributedString*) attribString
:(NSString*) string{
NSArray *substrings = [string componentsSeparatedByString:@"%"];
for(int i=0;i<(int) [substrings count];i++){
if([substrings[i] length]>0){
NSString* firstCharacter=[substrings[i] substringToIndex:1];
if([firstCharacter isEqualToString:@"&"]){
NSString* fontType=[substrings[i] substringWithRange:NSMakeRange(1, 1)];
//remove first two characters
NSString* newSubString=[substrings[i] substringFromIndex:2];
if([fontType isEqualToString:@"S"]){
[self appendWithSuperscript:attribString :newSubString];
} else if([fontType isEqualToString:@"s"]){
[self appendWithSubscript:attribString :newSubString];
} else if([fontType isEqualToString:@"B"]){
[self appendWithBold:attribString :newSubString];
} else if([fontType isEqualToString:@"I"]){
[self appendWithItalics:attribString :newSubString];
}
} else{
//regular string
[self append:attribString :substrings[i]];
}
}
}
}
其中appendWithBold等方法是用戶創建的方法,其轉換的NSString成格式化的大膽/上標/下標/等。 NSMutableAttributedString,然後將其附加到變量'attribString'。
礦可能不是最好的方法,但至少它表明,通過一點工作,你可以在Cocoa中自動執行下標和上標。
用'NSSuperscriptAttributeName'輕鬆工作!請注意,字體大小不會改變 - 只是y pos,下標必須明確地變小(例如'NSFontAttributeName')。 – Jay 2012-11-01 15:30:07
NB - 'NSSuperscriptAttributeName'採用整數。這隻允許在想要放置上標(或下標)的地方進行非常粗略的調整。我發現'NSBaselineOffsetAttributeName'更易於用於更細粒度的控制。 – Jay 2012-11-23 13:50:09