繁体   English   中英

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

[英]How do I prevent text from being cut off like in UITextView?

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

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

一些说明:

  • 扩展标签的框架将不起作用,因为它可能解决文本右侧但不在左侧的截止问题。
  • 我不能以廉价的方式把文本放在中心; 文本必须保持现在的任何对齐方式。
  • 我不能只将所有内容更改为UITextViews的原因是因为我的应用程序在后台进行了一些处理,并且只要它实例化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)];
}

我没有一个好的答案,但我可以建议一个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的问题。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM