2010-02-03 48 views

回答

5

NSSuperscriptAttributeName嘗試具有負值。

如果做不到這一點,困難的方法是用字符串中的[ο12 23 45 46]替換[]字符。

+1

用'NSSuperscriptAttributeName'輕鬆工作!請注意,字體大小不會改變 - 只是y pos,下標必須明確地變小(例如'NSFontAttributeName')。 – Jay 2012-11-01 15:30:07

+0

NB - 'NSSuperscriptAttributeName'採用整數。這隻允許在想要放置上標(或下標)的地方進行非常粗略的調整。我發現'NSBaselineOffsetAttributeName'更易於用於更細粒度的控制。 – Jay 2012-11-23 13:50:09

2

我在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中自動執行下標和上標。

相關問題