UILabel在指定位置插入小图片,前面是“...”

图片描述

场景:UILable展示问题描述的内容,附件为一个标志,表明此问题是否有图片;
问题:这个小图片要求始终跟在标题最后面,标题的内容是可变的,最多两行;单行或者内容不超过两行的时候的时候用NSAttributeString即可实现,但是刚好两行或者多于两行的时候要求图片的最右边和“遇”的最右边对齐,前面是"..."省略号;这个怎么实现!
难点:怎么截取字符串,并在合适的位置插入省略号和图片,用NSAttributeString还是CoreText,如何实现?

回答:

暴力计算法

有一个运行效率比较低的算法。将文字截成两段使用两个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开始计算,让它从一个比较大且安全的值开始。

以上是 UILabel在指定位置插入小图片,前面是“...” 的全部内容, 来源链接: utcz.com/p/186641.html

回到顶部