如何防止文本被截断,就像在UITextView中一样?

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

一些说明:

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

  • 在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)];
    }
    

    我没有一个很好的答案,但我可以建议一个混乱的做你想做的事情,并可能会给你一些有用的想法。 这个问题似乎暗示了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属性没有帮助。 看起来像苹果在这里的问题。


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

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

    链接地址: http://www.djcxy.com/p/28239.html

    上一篇: How do I prevent text from being cut off like in UITextView?

    下一篇: Can not change UILabel text color