1

我有一个 UILabel 和一个 UITextView 都具有相同的文本(字符串“SnellRoundhand”,Snell Roundhand Bold 字体,点大小 21)。UITextView 中的文本显示正确,但 UILabel 的文本在左侧和右侧被截断。如何让标签中的文本正确显示?

https://twitter.com/dandelarosa64/status/307549623717867520/photo/1

一些注意事项:

  • 扩展标签的框架不起作用,因为它可能会解决文本右侧的截断问题,但不能解决左侧的截断问题。
  • 我不能以便宜的方式让文本居中;文本必须保持现在的任何对齐方式。
  • 我不能将所有内容都更改为 UITextViews 的原因是因为我的应用程序在后台进行了一些处理,并且每当实例化 UITextView 时它都会崩溃。我希望我可以通过使用 UILabel 来渲染文本来解决这个问题。
4

3 回答 3

3

在 iOS 6 中,UILabel 的一个非常好的新特性是它支持属性字符串。属性字符串可以包括段落边距。因此,您可以为字符串添加边距,从而确保标签边缘和字符串的绘制之间会有一些额外的空间。

我书的这一部分有示例代码,可以为 UILabel 中绘制的字符串添加边距:

http://www.aeth.com/iOSBook/ch23.html#_attributed_strings

如果您想在 iOS 6 之前的系统上运行,您可以继承 UILabel 以强制从标签边缘插入文本,如以下代码所示(也来自我的书):

- (void)drawTextInRect:(CGRect)rect {
    [super drawTextInRect:CGRectInset(rect, 5.0, 5.0)];
}
于 2013-03-01T18:05:09.867 回答
0

在 iOS 6 上,UITextView 在每一侧都有边距,您可以调整内容插入以防止文本使用这些边距。

[textView setContentInset:UIEdgeInsetsMake(-8, -8, -8, -8)];

于 2013-08-08T15:46:56.367 回答
0

我没有一个好的答案,但我可以建议一个可以做你想做的事情的组合,并且可能会给你一些有用的想法。这个问题似乎暗示了 Label 和 TextView 处理时髦字体的基本问题。

这个概念很简单:

  • 使用左(或右)对齐调整 TextField 的大小以适合内容。
  • 稍微扩大文本字段的宽度。
  • 将理由更改为居中。

这将产生一个足够宽的字段以显示文本而无需剪切(如果您将其放大到适当的数量)。我知道您说过您不能更改文本对齐方式,但是这样做只会将文本移动一两点,最终会到达显示全文所需的位置。该字段以大小结束,文本位于应有的位置。例如:

self.textField.textAlignment = NSTextAlignmentLeft;
[self.textField sizeToFit];
CGRect frame = self.textField.frame;
frame.size.width += 4;
self.textField.frame = frame;
self.textField.textAlignment = NSTextAlignmentCenter;

行得通。如果它对您没有直接用处,我希望它能给您一些想法。

我尝试过的没有帮助的方法是继承 UITextField 并覆盖textRectForBounds:以扩大用于绘制文本的区域。我可以将文本起始位置稍微向右移动,但它仍然剪裁了左边缘。关闭clipsSubviews属性没有帮助。似乎苹果的问题在这里。

于 2013-03-01T17:18:46.053 回答