如何截断 UITextView 内容以适应缩小的尺寸?
我真的很难理解这个问题。
正如标题所示,我在 iPhone 应用程序的视图上有多个 UITextView。我以编程方式创建它们并成功地用文本填充该文本视图,但在某些情况下,我放入视图中的文本占用的空间比我为其分配的框架更多。在这种情况下,我希望截断文本,但我不知道该怎么做。
我已经预定义了以下常量;
#define viewOriginX 20
#define viewOriginY 180
这是我的 UITextView 创建代码;
textViewOne = [[UITextView alloc] initWithFrame:CGRectMake(viewOriginX, viewOriginY + 65, 280, 45];
textViewOne.delegate = self;
textViewOne.scrollEnabled = NO;
textViewOne.contentInset = UIEdgeInsetsZero;
textViewOne.font = viewFont;
textViewOne.textColor = [UIColor blackColor];
textViewOne.textAlignment = UITextAlignmentLeft;
[self.view addSubview:textViewOne];
在某些情况下,我这里有 15 到 20 行文本,我想将其截断为 2 行。
谁能帮助我朝正确的方向前进?
提前致谢! :D
I'm having real trouble getting my head around this issue.
As the title suggests, I have several UITextViews on a view in an iPhone application. I am programmatically creating them and successfully filling that textview with text, but in some cases the text I put in the view takes up more space than the frame I allocate for it. In this case I would like the text to be truncated, but I can't figure out how to do it.
I have predefined the following constants;
#define viewOriginX 20
#define viewOriginY 180
Here is my UITextView creation code;
textViewOne = [[UITextView alloc] initWithFrame:CGRectMake(viewOriginX, viewOriginY + 65, 280, 45];
textViewOne.delegate = self;
textViewOne.scrollEnabled = NO;
textViewOne.contentInset = UIEdgeInsetsZero;
textViewOne.font = viewFont;
textViewOne.textColor = [UIColor blackColor];
textViewOne.textAlignment = UITextAlignmentLeft;
[self.view addSubview:textViewOne];
In some cases I have 15 to 20 lines of text in here and I would like to truncate it to 2 lines.
Can anyone help me in the right direction?
Thanks in advance! :D
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
原始答案(iOS 6及更低版本)
遗憾的是,如果您需要可编辑视图,则带有
numberOfLines
的UILabel
不会这样做。或者您想要 UITextView 的(原生)垂直对齐方式。下面是一个 NSString 类别,它根据矩形中的大小从字符串中删除单词:
对于 UITextView,使用 8 的插入来说明 UIKit 绘制它们的方式:
更新的答案(iOS 7)
现在
UITextView
内部使用TextKit,它更容易。不要截断实际字符串,而是将
text
(或attributedText
)属性设置为整个字符串并截断容器中显示的文本量(就像我们对UILabel
所做的那样):Original Answer (iOS 6 and below)
Sadly,
UILabel
withnumberOfLines
wont do it if you need the view to be editable. Or you wantUITextView
's (native) vertical alignment.Here's an
NSString
category that deletes words from a string, according to it's size in a rect:For a
UITextView
, use an inset of 8 to account for the way UIKit draws them:Updated Answer (iOS 7)
Now
UITextView
uses TextKit internally, it's much easier.Rather than truncating the actual string, set the
text
(orattributedText
) property to the whole string and truncate the amount of text displayed in the container (just like we do withUILabel
):您可以进行字符计数。例如,如果您有这样的 UITextField:
每行有 20 个字符。如果您知道该数字,则可以通过
-substringToIndex:
方法简单地截断字符串。您还可以考虑
UILabel
。由于您只需要 2 行文本,UILabel 的numberOfLines
属性可以解决您的问题。You can do a character count. For example, if you have UITextField like this:
you have something like 20 characters per line. If you know that number you can simply truncate your string by
-substringToIndex:
method.You can also think about
UILabel
. Since you need only 2 lines of text, UILabel'snumberOfLines
property can solve your problem.由于
sizeWithFont:constrainedToSize:lineBreakMode:
在 iOS 7 中已弃用,因此我做了一些更改:}
Because
sizeWithFont:constrainedToSize:lineBreakMode:
is deprecated in iOS 7, I made a few changes:}
这是我编写的一段代码,用于截断字符串(按单词)以适应特定的宽度和高度:
用法:
Here's a peace of code i wrote to truncate a string (by words) to fit a certain width and height:
Usage: