記錄UITextView的一個(gè)BUG

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è)置labelattributedText再設(shè)置labelfont示罗,labelfont應(yīng)該是5,運(yùn)行結(jié)果如圖芝硬,沒毛病蚜点。

label

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è)置labelfont再設(shè)置labelattributedTextlabelfont應(yīng)該是20陡厘,運(yùn)行結(jié)果如圖抽米,沒毛病。

label

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è)置textViewattributedText再設(shè)置textViewfont翩蘸,textViewfont應(yīng)該是5所意,運(yùn)行結(jié)果如圖,沒毛病催首。

textView

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è)置textViewfont再設(shè)置textViewattributedText弧械,此時(shí)textView預(yù)期結(jié)果應(yīng)該和上邊的label一樣,font應(yīng)該是20空民,然而運(yùn)行結(jié)果如圖刃唐。

textView

造成問題的原因未知羞迷,根據(jù)多次測試總結(jié)的結(jié)果為:UITextViewattributedText中每一個(gè)NSTextAttachment和該NSTextAttachment前的最后一個(gè)半角字符中間所有的全角字符,他的font將永遠(yuǎn)使用UITextViewfont画饥,而不會(huì)使用attributedTextNSFontAttributeNamefont衔瓮。(雖然往屏幕上繪制時(shí)使用的是NSFontAttributeNamefont,但是布局時(shí)則使用UITextViewfont抖甘。所以上面的測試代碼執(zhí)行后热鞍,會(huì)將大小為20的字放在大小為5的字的空間展示,就出現(xiàn)了擠在一起的現(xiàn)象衔彻。實(shí)際上這段文字的font使用的是UITextViewfont:在textView中間輸入兩段fdsa fdsa fdsa 后就可以看出來薇宠,如下圖)
輸入文字后

富文本的使用場景大都是聊天消息的展示、動(dòng)態(tài)及其評(píng)論回復(fù)的展示艰额,平時(shí)在這些場景使用到富文本的時(shí)候基本也都會(huì)包含NSTextAttachment昼接,包含全角字符則更是必然事件。因此做出如下總結(jié):

①如果一段富文本中的文字的字體大小存在多種情況悴晰,則必須使用UILabel展示
②如果一段富文本中的所有文字只可能是一種字體大小慢睡,則兩個(gè)控件都可以使用,但是如果使用UITextView則需要設(shè)置fontUITextView默認(rèn)字體大小是12)铡溪,不建議設(shè)置NSFontAttributeName漂辐,因?yàn)?code>NSFontAttributeName必須和font大小相同

這個(gè)問題,在所有iOS版本上均可以復(fù)現(xiàn)棕硫,猜測蘋果一直不修復(fù)這個(gè)問題可能是很少有一段富文本使用多個(gè)字體大小的使用場景

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末髓涯,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子哈扮,更是在濱河造成了極大的恐慌纬纪,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件滑肉,死亡現(xiàn)場離奇詭異包各,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)靶庙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門问畅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人六荒,你說我怎么就攤上這事护姆。” “怎么了掏击?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵卵皂,是天一觀的道長。 經(jīng)常有香客問我砚亭,道長灯变,這世上最難降的妖魔是什么豺旬? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮柒凉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘篓跛。我一直安慰自己膝捞,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布愧沟。 她就那樣靜靜地躺著蔬咬,像睡著了一般。 火紅的嫁衣襯著肌膚如雪沐寺。 梳的紋絲不亂的頭發(fā)上林艘,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音混坞,去河邊找鬼狐援。 笑死,一個(gè)胖子當(dāng)著我的面吹牛究孕,可吹牛的內(nèi)容都是我干的啥酱。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼厨诸,長吁一口氣:“原來是場噩夢啊……” “哼镶殷!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起微酬,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤绘趋,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后颗管,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體陷遮,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年垦江,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了拷呆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡疫粥,死狀恐怖茬斧,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情梗逮,我是刑警寧澤项秉,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站慷彤,受9級(jí)特大地震影響娄蔼,放射性物質(zhì)發(fā)生泄漏怖喻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一岁诉、第九天 我趴在偏房一處隱蔽的房頂上張望锚沸。 院中可真熱鬧,春花似錦涕癣、人聲如沸哗蜈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽距潘。三九已至,卻和暖如春只搁,著一層夾襖步出監(jiān)牢的瞬間音比,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來泰國打工氢惋, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留洞翩,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓焰望,卻偏偏與公主長得像菱农,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子柿估,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345