【问题标题】:Objective c - Text indentation目标 c - 文本缩进
【发布时间】:2013-04-20 21:23:48
【问题描述】:

这个问题是关于在 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"];

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

【问题讨论】:

  • 你需要重写drawrect(用于控件)并且需要编写自己的缩进代码来解决这个问题。
  • 您是否尝试在如图所示的项目符号列表中执行此操作?你是如何渲染整个区块的?你能提供更多背景信息吗?
  • @BrianNickel 是的,我需要项目符号样式,我在我的问题中添加了信息。

标签: iphone ios objective-c uilabel core-text


【解决方案1】:

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

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

【讨论】:

  • 10x 你的回复,我想我需要使用核心文本框架。这是一个非常普遍的问题,我想很多人已经解决了这个问题并实施了一些通用的解决方案。所以我宁愿不再发明轮子,而是参考一些代码 sn-p 或教程。
【解决方案2】:

在 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 中可能是可能的。

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-19
      • 2011-06-29
      • 2017-04-24
      • 1970-01-01
      • 1970-01-01
      • 2021-07-12
      相关资源
      最近更新 更多