UILabel *label = [[UILabel alloc] init];
label.numberOfLines = 0;
label.frame = CGRectMake(30, 50, 330, 500);
[self.view addSubview:label];
NSString *s = @"北京青年報(bào)從石景山獲悉桥氏,北京石景山萬達(dá)廣場2020年7月2日中午12點(diǎn)50分精钮,廣場內(nèi)一名女顧客謝某某楣黍,接到中日友好醫(yī)院核酸檢測結(jié)果為陽性吱韭,現(xiàn)場防疫人員迅速將病患控制在西廣場開放區(qū)域彭则,同時(shí)稟報(bào)當(dāng)?shù)毓矙C(jī)關(guān)鳍刷,并控制現(xiàn)場人員流動(dòng),封鎖現(xiàn)場俯抖。顧客中午去過味千拉面進(jìn)行用餐输瓜。工作人員已將該商戶封閉消殺,現(xiàn)場無其他人員接觸。據(jù)石景山衛(wèi)健委介紹尤揣,今日中午13時(shí)許搔啊,區(qū)疾控中心接到報(bào)告后立即前往石景山區(qū)萬達(dá)廣場,對(duì)一名自稱核酸檢測陽性人員謝某進(jìn)行現(xiàn)場調(diào)查處理∏鄣蓿現(xiàn)已將謝某轉(zhuǎn)運(yùn)至醫(yī)院發(fā)熱門診進(jìn)行排查坯癣,萬達(dá)廣場現(xiàn)場已得到控制,初步判定的密切接觸者已送至石景山區(qū)集中隔離醫(yī)學(xué)觀察點(diǎn)進(jìn)行管理最欠。";
NSDictionary *attrs = @{NSFontAttributeName : [UIFont systemFontOfSize:20]};
NSMutableAttributedString *str = [[NSMutableAttributedString alloc] initWithString:s attributes:attrs];
NSTextAttachment *attachment = [[NSTextAttachment alloc] init];
attachment.image = [UIImage imageNamed:@"..."];
[str appendAttributedString:[NSAttributedString attributedStringWithAttachment:attachment]];
label.attributedText = str;
label.font = [UIFont systemFontOfSize:5];
先設(shè)置label
的attributedText
再設(shè)置label
的font
示罗,label
的font
應(yīng)該是5,運(yùn)行結(jié)果如圖芝硬,沒毛病蚜点。
UILabel *label = [[UILabel alloc] init];
label.numberOfLines = 0;
label.frame = CGRectMake(30, 50, 330, 500);
[self.view addSubview:label];
NSString *s = @"北京青年報(bào)從石景山獲悉,北京石景山萬達(dá)廣場2020年7月2日中午12點(diǎn)50分拌阴,廣場內(nèi)一名女顧客謝某某绍绘,接到中日友好醫(yī)院核酸檢測結(jié)果為陽性,現(xiàn)場防疫人員迅速將病患控制在西廣場開放區(qū)域迟赃,同時(shí)稟報(bào)當(dāng)?shù)毓矙C(jī)關(guān)陪拘,并控制現(xiàn)場人員流動(dòng),封鎖現(xiàn)場纤壁。顧客中午去過味千拉面進(jìn)行用餐左刽。工作人員已將該商戶封閉消殺,現(xiàn)場無其他人員接觸酌媒。據(jù)石景山衛(wèi)健委介紹欠痴,今日中午13時(shí)許,區(qū)疾控中心接到報(bào)告后立即前往石景山區(qū)萬達(dá)廣場秒咨,對(duì)一名自稱核酸檢測陽性人員謝某進(jìn)行現(xiàn)場調(diào)查處理±桑現(xiàn)已將謝某轉(zhuǎn)運(yùn)至醫(yī)院發(fā)熱門診進(jìn)行排查,萬達(dá)廣場現(xiàn)場已得到控制雨席,初步判定的密切接觸者已送至石景山區(qū)集中隔離醫(yī)學(xué)觀察點(diǎn)進(jìn)行管理菩咨。";
NSDictionary *attrs = @{NSFontAttributeName : [UIFont systemFontOfSize:20]};
NSMutableAttributedString *str = [[NSMutableAttributedString alloc] initWithString:s attributes:attrs];
NSTextAttachment *attachment = [[NSTextAttachment alloc] init];
attachment.image = [UIImage imageNamed:@"..."];
[str appendAttributedString:[NSAttributedString attributedStringWithAttachment:attachment]];
label.font = [UIFont systemFontOfSize:5];
label.attributedText = str;
先設(shè)置label
的font
再設(shè)置label
的attributedText
,label
的font
應(yīng)該是20陡厘,運(yùn)行結(jié)果如圖抽米,沒毛病。
UITextView *textView = [[UITextView alloc] init];
textView.frame = CGRectMake(30, 50, 330, 500);
[self.view addSubview:textView];
NSString *s = @"北京青年報(bào)從石景山獲悉雏亚,北京石景山萬達(dá)廣場2020年7月2日中午12點(diǎn)50分缨硝,廣場內(nèi)一名女顧客謝某某摩钙,接到中日友好醫(yī)院核酸檢測結(jié)果為陽性罢低,現(xiàn)場防疫人員迅速將病患控制在西廣場開放區(qū)域,同時(shí)稟報(bào)當(dāng)?shù)毓矙C(jī)關(guān),并控制現(xiàn)場人員流動(dòng)网持,封鎖現(xiàn)場宜岛。顧客中午去過味千拉面進(jìn)行用餐。工作人員已將該商戶封閉消殺功舀,現(xiàn)場無其他人員接觸萍倡。據(jù)石景山衛(wèi)健委介紹,今日中午13時(shí)許辟汰,區(qū)疾控中心接到報(bào)告后立即前往石景山區(qū)萬達(dá)廣場列敲,對(duì)一名自稱核酸檢測陽性人員謝某進(jìn)行現(xiàn)場調(diào)查處理。現(xiàn)已將謝某轉(zhuǎn)運(yùn)至醫(yī)院發(fā)熱門診進(jìn)行排查帖汞,萬達(dá)廣場現(xiàn)場已得到控制戴而,初步判定的密切接觸者已送至石景山區(qū)集中隔離醫(yī)學(xué)觀察點(diǎn)進(jìn)行管理。";
NSDictionary *attrs = @{NSFontAttributeName : [UIFont systemFontOfSize:20]};
NSMutableAttributedString *str = [[NSMutableAttributedString alloc] initWithString:s attributes:attrs];
NSTextAttachment *attachment = [[NSTextAttachment alloc] init];
attachment.image = [UIImage imageNamed:@"..."];
[str appendAttributedString:[NSAttributedString attributedStringWithAttachment:attachment]];
textView.attributedText = str;
textView.font = [UIFont systemFontOfSize:5];
先設(shè)置textView
的attributedText
再設(shè)置textView
的font
翩蘸,textView
的font
應(yīng)該是5所意,運(yùn)行結(jié)果如圖,沒毛病催首。
UITextView *textView = [[UITextView alloc] init];
textView.frame = CGRectMake(30, 50, 330, 500);
[self.view addSubview:textView];
NSString *s = @"北京青年報(bào)從石景山獲悉扶踊,北京石景山萬達(dá)廣場2020年7月2日中午12點(diǎn)50分,廣場內(nèi)一名女顧客謝某某郎任,接到中日友好醫(yī)院核酸檢測結(jié)果為陽性秧耗,現(xiàn)場防疫人員迅速將病患控制在西廣場開放區(qū)域,同時(shí)稟報(bào)當(dāng)?shù)毓矙C(jī)關(guān)涝滴,并控制現(xiàn)場人員流動(dòng)绣版,封鎖現(xiàn)場。顧客中午去過味千拉面進(jìn)行用餐歼疮。工作人員已將該商戶封閉消殺杂抽,現(xiàn)場無其他人員接觸。據(jù)石景山衛(wèi)健委介紹韩脏,今日中午13時(shí)許缩麸,區(qū)疾控中心接到報(bào)告后立即前往石景山區(qū)萬達(dá)廣場,對(duì)一名自稱核酸檢測陽性人員謝某進(jìn)行現(xiàn)場調(diào)查處理∩氖福現(xiàn)已將謝某轉(zhuǎn)運(yùn)至醫(yī)院發(fā)熱門診進(jìn)行排查杭朱,萬達(dá)廣場現(xiàn)場已得到控制,初步判定的密切接觸者已送至石景山區(qū)集中隔離醫(yī)學(xué)觀察點(diǎn)進(jìn)行管理吹散。";
NSDictionary *attrs = @{NSFontAttributeName : [UIFont systemFontOfSize:20]};
NSMutableAttributedString *str = [[NSMutableAttributedString alloc] initWithString:s attributes:attrs];
NSTextAttachment *attachment = [[NSTextAttachment alloc] init];
attachment.image = [UIImage imageNamed:@"..."];
[str appendAttributedString:[NSAttributedString attributedStringWithAttachment:attachment]];
textView.font = [UIFont systemFontOfSize:5];
textView.attributedText = str;
先設(shè)置textView
的font
再設(shè)置textView
的attributedText
弧械,此時(shí)textView
預(yù)期結(jié)果應(yīng)該和上邊的label
一樣,font
應(yīng)該是20空民,然而運(yùn)行結(jié)果如圖刃唐。
造成問題的原因未知羞迷,根據(jù)多次測試總結(jié)的結(jié)果為:
UITextView
的attributedText
中每一個(gè)NSTextAttachment
和該NSTextAttachment
前的最后一個(gè)半角字符中間所有的全角字符,他的font
將永遠(yuǎn)使用UITextView
的font
画饥,而不會(huì)使用attributedText
中NSFontAttributeName
的font
衔瓮。(雖然往屏幕上繪制時(shí)使用的是NSFontAttributeName
的font
,但是布局時(shí)則使用UITextView
的font
抖甘。所以上面的測試代碼執(zhí)行后热鞍,會(huì)將大小為20的字放在大小為5的字的空間展示,就出現(xiàn)了擠在一起的現(xiàn)象衔彻。實(shí)際上這段文字的font
使用的是UITextView
的font
:在textView
中間輸入兩段fdsa fdsa fdsa 后就可以看出來薇宠,如下圖)富文本的使用場景大都是聊天消息的展示、動(dòng)態(tài)及其評(píng)論回復(fù)的展示艰额,平時(shí)在這些場景使用到富文本的時(shí)候基本也都會(huì)包含
NSTextAttachment
昼接,包含全角字符則更是必然事件。因此做出如下總結(jié):
①如果一段富文本中的文字的字體大小存在多種情況悴晰,則必須使用UILabel
展示
②如果一段富文本中的所有文字只可能是一種字體大小慢睡,則兩個(gè)控件都可以使用,但是如果使用UITextView
則需要設(shè)置font
(UITextView
默認(rèn)字體大小是12)铡溪,不建議設(shè)置NSFontAttributeName
漂辐,因?yàn)?code>NSFontAttributeName必須和font
大小相同
這個(gè)問題,在所有iOS版本上均可以復(fù)現(xiàn)棕硫,猜測蘋果一直不修復(fù)這個(gè)問題可能是很少有一段富文本使用多個(gè)字體大小的使用場景