gpt4 book ai didi

ios - 计算 UILabel 中可见文本的范围

转载 作者:可可西里 更新时间:2023-11-01 05:43:38 24 4
gpt4 key购买 nike

我有一个固定大小的 UILabel,我在这个 UILabel 中设置的文本可以是 200、5 或 500 个字符长。我想要做的是计算在当前 UILabel 大小下我可以将多少可见文本放入此 UILabel

我为什么要这样做?因为我想在文本的末尾添加一个 ...Read more 文本,但不是在整个文本的末尾,只是在 UILabel 中可见文本的末尾

提前致谢。

最佳答案

所以我创建了一个返回当前可见字符串高度(与 UITextView/UITextField 或 UILabel 的大小)的方法,它也支持 iOS6+,这就是我所做的:

- (NSUInteger)fitString:(NSString *)string intoLabel:(UILabel *)label
{
UIFont *font = label.font;
NSLineBreakMode mode = label.lineBreakMode;

CGFloat labelWidth = label.frame.size.width;
CGFloat labelHeight = label.frame.size.height;
CGSize sizeConstraint = CGSizeMake(labelWidth, CGFLOAT_MAX);

if (SYSTEM_VERSION_GREATER_THAN(iOS_7))
{
NSDictionary *attributes = @{ NSFontAttributeName : font };
NSAttributedString *attributedText = [[NSAttributedString alloc] initWithString:string attributes:attributes];
CGRect boundingRect = [attributedText boundingRectWithSize:sizeConstraint options:NSStringDrawingUsesLineFragmentOrigin context:nil];
{
if (boundingRect.size.height > labelHeight)
{
NSUInteger index = 0;
NSUInteger prev;
NSCharacterSet *characterSet = [NSCharacterSet whitespaceAndNewlineCharacterSet];

do
{
prev = index;
if (mode == NSLineBreakByCharWrapping)
index++;
else
index = [string rangeOfCharacterFromSet:characterSet options:0 range:NSMakeRange(index + 1, [string length] - index - 1)].location;
}

while (index != NSNotFound && index < [string length] && [[string substringToIndex:index] boundingRectWithSize:sizeConstraint options:NSStringDrawingUsesLineFragmentOrigin attributes:attributes context:nil].size.height <= labelHeight);

return prev;
}
}
}
else
{
if ([string sizeWithFont:font constrainedToSize:sizeConstraint lineBreakMode:mode].height > labelHeight)
{
NSUInteger index = 0;
NSUInteger prev;
NSCharacterSet *characterSet = [NSCharacterSet whitespaceAndNewlineCharacterSet];

do
{
prev = index;
if (mode == NSLineBreakByCharWrapping)
index++;
else
index = [string rangeOfCharacterFromSet:characterSet options:0 range:NSMakeRange(index + 1, [string length] - index - 1)].location;
}

while (index != NSNotFound && index < [string length] && [[string substringToIndex:index] sizeWithFont:font constrainedToSize:sizeConstraint lineBreakMode:mode].height <= labelHeight);

return prev;
}
}

return [string length];
}

当然,SYSTEM_VERSION_GREATER_THAN(iOS_7) 都是我定义的宏。您还应该定义自己的。

祝你好运!

关于ios - 计算 UILabel 中可见文本的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32311256/

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