使用YYLabel小結(jié)挖函,供參考

最近業(yè)務(wù)需求需要我們實現(xiàn)圖文混排状植,之前打算使用UIlabel自帶的屬性attributedText,這個屬性也很強大怨喘,可以實現(xiàn)圖文混排津畸,但是發(fā)現(xiàn),實現(xiàn)鏈接點擊有些困難哲思,于是放棄洼畅。再后來發(fā)現(xiàn)了一個TTTAttributedLabel,他繼承自UIlabel棚赔,但是使用的過程中發(fā)現(xiàn)帝簇,這個三方對鏈接支持是可以的,而對圖片是不支持的靠益,這讓我一度糾結(jié)丧肴。之后,下定決心胧后,重繪UI芋浮,重新選擇,最終選擇了YYText壳快,實踐發(fā)現(xiàn)纸巷,圖文混排還是YYText好用啊。YYText繼承自UIView眶痰,也實現(xiàn)了UILabel的很多功能和屬性瘤旨,真的很強大,不說了竖伯,直接上代碼吧存哲。

  YYLabel * commentLabel =[YYLabel new];
    commentLabel.numberOfLines = 3;//限制三行
    commentLabel.lineBreakMode = NSLineBreakByTruncatingTail;
    //這個屬性必須設(shè)置因宇,多行才有效
    commentLabel.preferredMaxLayoutWidth = mScreenWidth -20;
    NSMutableAttributedString  *titleAttr = [self getAttrWithData:commentData];
    commentLabel.attributedText  = titleAttr;

getAttrWithData這個方法主要是對文字進行排版屬性的設(shè)置,代碼中包含我們自己的一些業(yè)務(wù)邏輯祟偷,所以察滑,需要的小伙伴們可以參考一下。
為了方便大家看修肠,這個方法有很多行贺辰,沒有拆分,實際使用的時候氛赐,大家盡量還是拆分一下魂爪,一個方法不要超過100行比較好先舷。

- (NSMutableAttributedString*)getAttrWithData:(JZCommunityListPostCommentsModel *)model{
    NSString * attributedString = [NSString stringWithFormat:@"%@:%@",model.author.name,model.content];
    NSMutableAttributedString * resultAttr = [[NSMutableAttributedString alloc] initWithString:attributedString];
    
    //對齊方式 這里是 兩邊對齊
    resultAttr.yy_alignment = NSTextAlignmentLeft;
    //設(shè)置行間距
    resultAttr.yy_lineSpacing = 5;
    //設(shè)置字體大小
    resultAttr.yy_font = [UIFont systemFontOfSize:13];
    //設(shè)置作者的文字顏色
    NSRange authorRange = [attributedString rangeOfString:model.author.name];
    [resultAttr yy_setTextHighlightRange:authorRange color:[UIColor colorFromRGB:0x999999] backgroundColor:nil userInfo:nil];
    //處理topic----我們自己業(yè)務(wù)
    for (int i= 0; i<model.at_topics_content.count; i++) {
        NSDictionary * dict = model.at_topics_content[i];
        NSRange topicRange = [[resultAttr string]rangeOfString:[NSString stringWithFormat:@"<!--TOPIC#%d-->",i]];
        if (topicRange.length>0) {//說明有話題
            NSString * replaceStr = [NSString stringWithFormat:@"#%@%d#",dict[@"title"],i];
            [resultAttr replaceCharactersInRange:topicRange withString:replaceStr];
            NSRange replaceRan = [[resultAttr string]rangeOfString:replaceStr];
            NSRange replaceRange = NSMakeRange(replaceRan.location, replaceRan.length-1);
            NSString * replaceString = [NSString stringWithFormat:@"#%@#",dict[@"title"]];
            [resultAttr replaceCharactersInRange:replaceRan withString:replaceString];
            
            //修改話題的顏色
            [resultAttr yy_setTextHighlightRange:replaceRange color:[UIColor colorFromRGB:0xfc5f59] backgroundColor:nil tapAction:^(UIView * _Nonnull containerView, NSAttributedString * _Nonnull text, NSRange range, CGRect rect) {
                NSString * clickStr = [[text string] substringWithRange:range];
                for (NSDictionary * dict in model.at_topics_content) {
                    NSString * title = [NSString stringWithFormat:@"#%@#",dict[@"title"]];                    
                    if ([title isEqualToString:clickStr]) {
                        //根據(jù)urlroute跳到話題頁
                        if ([dict.allKeys containsObject:@"urlroute"]) {
                            NSString * urlRoute = dict[@"urlroute"];
                            [JZRouter routeURL:urlRoute];
                        }
                         break;
                    }
                }
            }];
        }
    }
    
    //處理圖片 img
    for (int i = 0; i<model.img.count; i++) {
        NSString * imageStr = [NSString stringWithFormat:@"<!--IMG#%d-->",i];
        NSRange imageRange = [[resultAttr string] rangeOfString:imageStr];
        if (imageRange.length>0) {//有圖片艰管,處理圖片
            NSString * strimg = [NSString stringWithFormat:@"查看圖片%d",i];
            [resultAttr replaceCharactersInRange:imageRange withString:strimg];
            NSRange strRange = [[resultAttr string] rangeOfString:strimg];
            
            //插入圖片
            UIImage *image = [UIImage imageNamed:@"community_checkImage"];
            NSMutableAttributedString *attachment = [NSMutableAttributedString yy_attachmentStringWithContent:image contentMode:UIViewContentModeCenter attachmentSize:image.size alignToFont:[UIFont systemFontOfSize:13] alignment:YYTextVerticalAlignmentCenter];
            [resultAttr insertAttributedString:attachment atIndex:strRange.location];
            NSRange linkRange = NSMakeRange(strRange.location, strRange.length+1);
            //把數(shù)字文字變小,且變成白色,隱藏起來
            NSInteger loca = linkRange.location + linkRange.length -1;
            NSRange numRange = NSMakeRange(loca, 1);
            [resultAttr yy_setFont:[UIFont systemFontOfSize:1] range:numRange];
            [resultAttr yy_setColor:[UIColor whiteColor] range:numRange];
            __weak JZCommunityBigImageCell * weakSelf = self;
            [resultAttr yy_setTextHighlightRange:linkRange color:[UIColor colorFromRGB:0xfc5f59] backgroundColor:nil tapAction:^(UIView * _Nonnull containerView, NSAttributedString * _Nonnull text, NSRange range, CGRect rect) {
                NSString * clickStr = [[text string] substringWithRange:range];
                NSString * numStr = [clickStr substringFromIndex:5];
                NSInteger index = [numStr integerValue];
                if (index<model.img.count) {
                    NSString *imageUrl = model.img[index];
                    NSArray * array = @[imageUrl];
                    [weakSelf showPhotoGallary:array withSrc:imageUrl];
                }
            }];
        }
    }
    
    return resultAttr;
    
}

小結(jié)一下:整理一下蒋川,和YYLabel相關(guān)的設(shè)置如下

-(void)manageYYLabelOne{
   //設(shè)置鏈接牲芋,添加圖片
    NSString * title = @"小明說:我是一個yytextLabel,我要實現(xiàn)富媒體捺球。之前實現(xiàn)富媒體的方法不夠好缸浦,這次一定要成功!之前實現(xiàn)富媒體的方法不夠好氮兵,這次一定要成功裂逐!之前實現(xiàn)富媒體的方法不夠好,之前實現(xiàn)富媒體的方法不夠好泣栈,之前實現(xiàn)富媒體的方法不夠好卜高,之前實現(xiàn)富媒體的方法不夠好,之前實現(xiàn)富媒體的方法不夠好南片,之前實現(xiàn)富媒體的方法不夠好掺涛,";
    //之前實現(xiàn)富媒體的方法不夠好,這次一定要成功疼进!
    self.yyLabelOne.numberOfLines = 3;
    self.yyLabelOne.lineBreakMode = NSLineBreakByTruncatingTail;
    //這個屬性必須設(shè)置薪缆,多行才有效
    self.yyLabelOne.preferredMaxLayoutWidth = kScreenWidth -20;
    YYTextContainer * container = [YYTextContainer new];
    //限制寬度
    container.size             = CGSizeMake(kScreenWidth-20,CGFLOAT_MAX);
    NSMutableAttributedString  *titleAttr = [self getAttr:title];
    YYTextLayout *titleLayout = [YYTextLayout layoutWithContainer:container text:titleAttr];
    
    CGFloat titleLabelHeight = titleLayout.textBoundingSize.height;
    if (titleLabelHeight>51) {//大于三行,顯示三行的高度
        titleLabelHeight = 51;
    }
    self.yyLabelOne.frame = CGRectMake(10,50,[UIScreen mainScreen].bounds.size.width-20,titleLabelHeight);
    self.yyLabelOne.attributedText  = titleAttr;
    
}

- (NSMutableAttributedString*)getAttr:(NSString*)attributedString {
    NSMutableAttributedString * resultAttr = [[NSMutableAttributedString alloc] initWithString:attributedString];
    
    //對齊方式 這里是 兩邊對齊
    resultAttr.yy_alignment = NSTextAlignmentLeft;
    //設(shè)置行間距
    resultAttr.yy_lineSpacing = 5;
    //設(shè)置字體大小
    resultAttr.yy_font = [UIFont systemFontOfSize:13];
    //設(shè)置連接文字
    [resultAttr yy_setTextHighlightRange:NSMakeRange(3, 3) color:[UIColor redColor] backgroundColor:nil tapAction:^(UIView * _Nonnull containerView, NSAttributedString * _Nonnull text, NSRange range, CGRect rect) {
        NSLog(@"這是一個連接   %@",[text string]);
    }];
    //設(shè)置特殊文字顏色
    [resultAttr yy_setTextHighlightRange:NSMakeRange(0, 3) color:[UIColor greenColor] backgroundColor:nil userInfo:nil];
    
    //添加圖片
    UIImage *image = [UIImage imageNamed:@"community_checkImage"];
    NSMutableAttributedString *attachment = nil;
    attachment = [NSMutableAttributedString yy_attachmentStringWithContent:image contentMode:UIViewContentModeCenter attachmentSize:image.size alignToFont:[UIFont systemFontOfSize:13] alignment:YYTextVerticalAlignmentCenter];
    //[resultAttr appendAttributedString: attachment];
    [resultAttr insertAttributedString:attachment atIndex:3];
    
    //可以設(shè)置某段字體的大小
    //[resultAttr yy_setFont:[UIFont boldSystemFontOfSize:CONTENT_FONT_SIZE] range:NSMakeRange(0, 3)];
    //設(shè)置字間距
    //resultAttr.yy_kern = [NSNumber numberWithFloat:1.0];
    
    return resultAttr;
    
}

實現(xiàn)效果如下:(備注:背景色是xib上畫的伞广,代碼中沒有拣帽;圖片是本地的)。

image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末嚼锄,一起剝皮案震驚了整個濱河市减拭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌灾票,老刑警劉巖峡谊,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡既们,警方通過查閱死者的電腦和手機濒析,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來啥纸,“玉大人号杏,你說我怎么就攤上這事∷拱簦” “怎么了盾致?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長荣暮。 經(jīng)常有香客問我庭惜,道長,這世上最難降的妖魔是什么穗酥? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任护赊,我火速辦了婚禮,結(jié)果婚禮上砾跃,老公的妹妹穿的比我還像新娘骏啰。我一直安慰自己,他們只是感情好抽高,可當我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布判耕。 她就那樣靜靜地躺著,像睡著了一般翘骂。 火紅的嫁衣襯著肌膚如雪壁熄。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天雏胃,我揣著相機與錄音请毛,去河邊找鬼。 笑死瞭亮,一個胖子當著我的面吹牛方仿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播统翩,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼仙蚜,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了厂汗?” 一聲冷哼從身側(cè)響起委粉,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎娶桦,沒想到半個月后贾节,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體汁汗,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年栗涂,在試婚紗的時候發(fā)現(xiàn)自己被綠了知牌。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡斤程,死狀恐怖角寸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情忿墅,我是刑警寧澤扁藕,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站疚脐,受9級特大地震影響亿柑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜亮曹,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一橄杨、第九天 我趴在偏房一處隱蔽的房頂上張望秘症。 院中可真熱鬧照卦,春花似錦、人聲如沸乡摹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽聪廉。三九已至瞬痘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間板熊,已是汗流浹背框全。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留干签,地道東北人津辩。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像容劳,于是被迫代替她去往敵國和親喘沿。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,500評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫竭贩、插件蚜印、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,119評論 4 61
  • 人生可以控制嗎? 未來可以控制嗎留量? 人可以被控制嗎窄赋? 人生一切的未知哟冬,造就了對未來的不斷探索,但是你有想過忆绰,會過上...
    黑白書簽閱讀 1,296評論 0 0
  • 夢醒午后的你 與舊雨不再見 微溫的時光角落里 都會藏著時代印記的書店 小小的鎮(zhèn)子 一扇扇木質(zhì)大門 掌心的余溫還在 ...
    折鈺閱讀 379評論 0 0
  • 一较木、Maven的配置 1.Maven下載: 下載地址https://maven.apache.org/downlo...
    docki閱讀 831評論 1 2
  • 我們對愛情總是期待這樣的圓滿:花好月圓伐债、舉案齊眉预侯、笑傲江湖攜手老。事實上峰锁,走進圍城的人多少有同樣的困惑:雞毛蒜皮萎馅、...
    葉葉素心閱讀 601評論 0 8