如何防止文本像UITextView一样被切断?

时间:2013-03-01 15:48:17

标签: ios uikit uilabel uitextview

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

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

一些注意事项:

  • 扩展标签的框架将无法正常工作,因为它可能会解决文本右侧但不在左侧的截止问题。
  • 我不能以便宜的方式把文本放在中心;文本必须保持现在的任何对齐状态。
  • 我不能将所有内容更改为UITextViews的原因是因为我的应用程序在后台进行了一些处理,并且只要它实例化UITextView就会崩溃。我希望通过使用UILabel来渲染文本,我可以解决这个问题。

3 个答案:

答案 0 :(得分:3)

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

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

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

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

- (void)drawTextInRect:(CGRect)rect {
    [super drawTextInRect:CGRectInset(rect, 5.0, 5.0)];
}

答案 1 :(得分:0)

我没有一个好的答案,但我可以建议一个kludge,sorta做你想做的事情,可能会给你一些有用的想法。肯定的问题似乎表明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 属性没有帮助。这看起来像Apple的问题。

答案 2 :(得分:0)

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

  

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