ios - UILabel在指定位置插入小图片,前面是“...”
天蓬老师
天蓬老师 2017-04-17 15:39:00
[iOS讨论组]

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

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(1)
大家讲道理

暴力计算法

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号