10

这个问题是关于在 iOS 中实现文本缩进(“将文本放置在更右侧以将其与周围文本分开”)。

以以下文本为例:

  1. 这是第一部分。
  2. 这是第二个,
    有两条线。
  3. 这是第三个。

请注意,第 2 部分中的第二行开始向右更远,就在上面的行下方。

我的代码包含一个数组NSString,每个都应该显示为一个带有数字项目符号的部分,如上所示。例如:

NSArray *array = [NSArray arrayWithObjects:@"1. This is the first section.", @"2. This is the second one, with two lines.", @"3. This is the third.", nil];

我用来UILable在屏幕上显示文本。
要将数组中的文本设置为标签,并在我使用的新行中分隔每个字符串

myLabel.text = [array componentsJoinedByString:@"\n"];

任何想法如何获得这种效果?

4

3 回答 3

26

在 iOS6 中,这在某种程度上是可能的- [UILabel setAttributedText:]

NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.headIndent = 29;

myLabel.attributedText = [[NSAttributedString alloc] initWithString:
    @"1.\tShort line.\n2.\tLong line with content that triggers wrapping.\n3.\tShort line."
    attributes:@{NSParagraphStyleAttributeName: paragraphStyle}];

上述代码的结果

这会为后续行添加缩进。看起来iOS不像OSX那样支持制表位,所以我没有看到调整数字和文本之间差距的方法。这在 CoreText 中可能是可能的。

当然,您也可以将标签替换为 aUIWebView并以性能为代价对所有版本的 iOS 进行完全格式控制。

于 2013-04-26T19:46:22.590 回答
2

好吧,我决定在不使用 Core Text 的情况下自己实现它,我只是创建了一个视图结构,它可以让所有缩进自己工作,并让您根据需要自定义它。

对于所有对实现感兴趣的人,您可以在此处查看源代码和示例项目:
ECListView 项目

于 2013-04-27T22:58:58.400 回答
0

如果您有任何特定的布局要求,UILabel 不会削减它。为此,您将需要深入研究 Core Text。好消息是 Core Text 可以让你做任何你能想象到的文本布局。坏消息是,所有这些功能都带来了一些复杂性,因此要使用它,您将不得不花一些时间来了解框架的工作原理。

在某些情况下适用的替代方法是使用 Web 视图来显示您的文本。UIWebView 将允许您使用 HTML 和 CSS 进行任何可以管理的文本布局。

于 2013-04-26T16:46:13.820 回答