如何格式化字符串以在ios中正确显示

时间:2014-08-30 09:13:10

标签: ios nsstring uitextview string-formatting

我的应用中有一个FAQ部分,但我必须使用不可编辑的UITextView以某种方式呈现它。就像下面一样,

  1. 如何取消录音?

    一个。您可以通过按取消(红色'X')按钮

    取消正在进行的录制
      in the center of the speaker on the recording screen. The audio recording 
      will not be saved. 
    
  2. 但问题是你可以看到必须用一些填充来显示,下一行应该在答案线"不在A" 之下。并且有一个巨大的问题文档,因此我无法手动格式化。它适用于iPhone和iPad,所以我的UITextView宽度不同。有没有解决这类问题的方法?

1 个答案:

答案 0 :(得分:2)

我建议使用NSAttributedStringNSParagraphStyle结合NSParagraphAttributeName

这是一个例子:

NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:yourString];

int indent1 = 0;
int indent2 = 20;
int indent3 = 2*indent2;

NSMutableParagraphStyle *styleTitleByNumber = [[NSMutableParagraphStyle alloc] init];
[styleTitleByNumber setFirstLineHeadIndent:indent1];
[styleTitleByNumber setHeadIndent:indent1];

NSMutableParagraphStyle *styleTitleByLetter = [[NSMutableParagraphStyle alloc] init];
[styleTitleByLetter setFirstLineHeadIndent:indent2];
[styleTitleByLetter setHeadIndent:indent2];

NSMutableParagraphStyle *styleSimpleText = [[NSMutableParagraphStyle alloc] init];
[styleSimpleText setFirstLineHeadIndent:indent3];
[styleSimpleText setHeadIndent:indent3];

[attributedString addAttribute:NSParagraphStyleAttributeName 
                         value:styleTitleByNumber
                         range:rangeOfTitleByNumber];
[attributedString addAttribute:NSParagraphStyleAttributeName 
                          value:styleTitleByLetter 
                          range:rangeOfTitleByLetter];
[attributedString addAttribute:NSParagraphStyleAttributeName 
                          value:styleSimpleText
                          range:rangeOfSimpleText];

[yourTextView setAttributedText:attributedString];

现在,根据您的初始文本的格式,我将告诉您如何应用哪种样式(对于NSRange参数),或者您也可以,如果不同的部分分开应用直接影响NSAttributedString,然后将它们全部合并。