UILabel在指定位置插入小图片,前面是“...”
场景:UILable展示问题描述的内容,附件为一个标志,表明此问题是否有图片;
问题:这个小图片要求始终跟在标题最后面,标题的内容是可变的,最多两行;单行或者内容不超过两行的时候的时候用NSAttributeString即可实现,但是刚好两行或者多于两行的时候要求图片的最右边和“遇”的最右边对齐,前面是"..."省略号;这个怎么实现!
难点:怎么截取字符串,并在合适的位置插入省略号和图片,用NSAttributeString还是CoreText,如何实现?
wincard
9 years, 7 months ago
Answers
暴力计算法
有一个运行效率比较低的算法。将文字截成两段使用两个label。
使用下面代码将文字拆分成两行
NSString * string = nil;
NSString * string1 = nil;
NSString * string2 = nil;
CGFloat labelMaxWidth = 280;
NSDictionary *attribute = @{NSFontAttributeName: label.font};
for (NSInteger i = 0; i < string.length; i++ )
{
NSString * s = [string substringToIndex:i];
CGSize size = [s boundingRectWithSize:size
options: \
NSStringDrawingTruncatesLastVisibleLine |
NSStringDrawingUsesLineFragmentOrigin |
NSStringDrawingUsesFontLeading
attributes:attribute
context:nil].size;
if ( size.width > labelMaxWidth ) {
string1 = [string substringToIndex:i-1];
string2 = [string substringFromIndex:i];
}
}
if (string1 == nil)
{
string1 = string;
}
// string1 为第一行文字
// string2 为第二行文字(可能为nil)
如果只有string1,那就把图片加入到第一行,如果存在string2,就把图片加到第二行。
上面时最粗暴的算法,可以用别的算法提高运行效率,比如不让从0开始计算,让它从一个比较大且安全的值开始。
悠久D成敗
answered 9 years, 7 months ago