gpt4 book ai didi

ios - 如何截断 UITextView 内容以适应缩小的尺寸?

转载 作者:可可西里 更新时间:2023-11-01 03:22:23 39 4
gpt4 key购买 nike

我很难理解这个问题。

如标题所示,我在 iPhone 应用程序的一个 View 上有多个 UITextView。我以编程方式创建它们并成功地用文本填充该 TextView ,但在某些情况下,我放入 View 中的文本占用的空间比我为其分配的框架要多。在这种情况下,我希望文本被截断,但我不知道该怎么做。

我已经预定义了以下常量;

#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

最佳答案

原始答案(iOS 6 及以下版本)

遗憾的是,如果您需要 View 可编辑,带有 numberOfLinesUILabel 将无法执行此操作。或者您想要 UITextView 的( native )垂直对齐方式。

这是一个 NSString 类别,它根据它在 rect 中的大小从字符串中删除单词:

@interface NSString (StringThatFits)
- (NSString *)stringByDeletingWordsFromStringToFit:(CGRect)rect
withInset:(CGFloat)inset
usingFont:(UIFont *)font
@end

@implementation NSString (StringThatFits)
- (NSString *)stringByDeletingWordsFromStringToFit:(CGRect)rect
withInset:(CGFloat)inset
usingFont:(UIFont *)font
{
NSString *result = [self copy];
CGSize maxSize = CGSizeMake(rect.size.width - (inset * 2), FLT_MAX);
CGSize size = [result sizeWithFont:font
constrainedToSize:maxSize
lineBreakMode:UILineBreakModeWordWrap];
NSRange range;

if (rect.size.height < size.height)
while (rect.size.height < size.height) {

range = [result rangeOfString:@" "
options:NSBackwardsSearch];

if (range.location != NSNotFound && range.location > 0 ) {
result = [result substringToIndex:range.location];
} else {
result = [result substringToIndex:result.length - 1];
}

size = [result sizeWithFont:font
constrainedToSize:maxSize
lineBreakMode:UILineBreakModeWordWrap];
}

return result;
}
@end

对于 UITextView,使用 8 的插图来说明 UIKit 绘制它们的方式:

CGRect rect = aTextView.frame;
NSString *truncatedString = [theString stringByDeletingWordsFromStringToFit:rect
withInset:8.f
usingFont:theTextView.font];

更新的答案(iOS 7)

现在 UITextView 在内部使用 TextKit,它更容易。

不是截断实际字符串,而是将 text(或 attributedText)属性设置为整个字符串并截断显示的文本量在容器中(就像我们对 UILabel 所做的那样):

self.textView.scrollEnabled = NO;
self.textView.textContainer.maximumNumberOfLines = 0;
self.textView.textContainer.lineBreakMode = NSLineBreakByTruncatingTail;

关于ios - 如何截断 UITextView 内容以适应缩小的尺寸?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7057707/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com