iOS10.3系統以后(NSStrikethroughStyleAttributeName)富文本不顯示

在iOS10.3系統上, 刪除線(NSStrikethroughStyleAttributeName)富文本不顯示,確切的說是在字符串中間某一段文字添加刪除線富文本會出現異常。這個可能是蘋果系統的bug。

iOS 10.3 系統以后,給 字符串中的某一段文字添加刪除線富文本 是不可以的;

中文整個字符串添加刪除線富文本也不行,只要添加刪除線富文本的字符串包含中文就是不行;

先設置其中一部分字號(NSFontAttributeName)富文本,在一起設置刪除線富文本也不行;

    NSMutableAttributedString *markingAttrStr = [[NSMutableAttributedString alloc] initWithString:markingPriceStr];
//    [markingAttrStr addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:9.0f] range:NSMakeRange(0, 1)]; 必須要注釋掉這個
    [markingAttrStr addAttribute:NSStrikethroughStyleAttributeName value:@(NSUnderlineStyleSingle) range:NSMakeRange(0, markingPriceStr.length)];
    _markingPriceLab.attributedText = markingAttrStr;

特別注意,這個人民幣符號“¥”和“¥”的區別,前面那個就可以,后面直接切換成中文輸入法的就不行。

iOS 10.3以前可以正常顯示

    NSString *marketPriceStr = [NSString stringWithFormat:@"¥%.2f", product.marketPrice];
    NSString *showStr = [NSString stringWithFormat:@"¥%.2f %@", product.goodsPrice, marketPriceStr];
    NSMutableAttributedString *showAttrStr = [[NSMutableAttributedString alloc] initWithString:showStr];
    NSRange range = [showStr rangeOfString:marketPriceStr options:NSBackwardsSearch];
    NSDictionary *attr = @{
                           NSFontAttributeName               : [UIFont systemFontOfSize:12],
                           NSStrikethroughStyleAttributeName : @(NSUnderlineStyleSingle | NSUnderlinePatternSolid),
                           NSStrikethroughColorAttributeName : [UIColor colorWithRed:230 / 255.0f green:23 / 255.0f blue:115 / 255.0f alpha:1]
                           };
    [showAttrStr addAttributes:attr range:range];
    self.priceLabel.attributedText = showAttrStr;

iOS 10.3上顯示異常,需要在添加一個NSBaselineOffsetAttributeName屬性才可以。

    NSString *marketPriceStr = [NSString stringWithFormat:@"¥%.2f", product.marketPrice];
    NSString *showStr = [NSString stringWithFormat:@"¥%.2f %@", product.goodsPrice, marketPriceStr];
    NSMutableAttributedString *showAttrStr = [[NSMutableAttributedString alloc] initWithString:showStr];
    NSRange range = [showStr rangeOfString:marketPriceStr options:NSBackwardsSearch];
    NSDictionary *attr = @{
                           NSFontAttributeName               : [UIFont systemFontOfSize:12],
                           NSStrikethroughStyleAttributeName : @(NSUnderlineStyleSingle | NSUnderlinePatternSolid),
                           NSBaselineOffsetAttributeName     : @(NSUnderlineStyleSingle),
                           NSStrikethroughColorAttributeName : [UIColor colorWithRed:230 / 255.0f green:23 / 255.0f blue:115 / 255.0f alpha:1]
                           };
    [showAttrStr addAttributes:attr range:range];
    self.priceLabel.attributedText = showAttrStr;

注意:這個時候在模擬器上是可以的,真機上還是不行。原因就是你設置字符串中的某一段文字下劃線富文本。 我的解決辦法是:1、將原來的一個label 用兩個label合成,單獨設置富文本,好麻煩啊。2、添加一個View在要刪除的字符串上面,替代下劃線。也不太好。。

朋友們有更好的解決辦法沒? 求告知,感激不盡啊。O(∩_∩)O謝謝!

這樣直接給某一字符串全體設置下劃線富文本是可以的
        NSDictionary *attribtDic = @{
                                     NSStrikethroughStyleAttributeName:[NSNumber numberWithInteger:NSUnderlineStyleSingle],
                                     NSForegroundColorAttributeName:kSubTextFontColor1
                                     };
        NSMutableAttributedString *attribtStr   = [[NSMutableAttributedString alloc]initWithString:priceString attributes:attribtDic];
        self.priceLabel.attributedText  = attribtStr;
這里也要說一下字符串中給某一個特定內容字符串設置富文本的方法,實質是查找這個字符串方法

//先拿到要設置富文本字符串的位置 這里就是給showStr字符串里的marketPriceStr這些字設置富文本 NSRange range = [showStr rangeOfString:marketPriceStr options:NSBackwardsSearch]; 然后添加富文本 在這個找到的特殊位置 [showAttrStr addAttributes:attr range:range];

還有UILabel顯示文字問題

UlLabel顯示文字,可以選擇NSLineBreakMode方式,也可以設置NSTextAlignment文字對齊方式。

當你在UILabel 正上方設置一個控件,它們都是右對齊方式顯示,這時候顯示中文可能會出現不是特別右對齊的情況。
解決辦法:

設置一下NSTextAlignment文字對齊方式,選擇兩端對齊方式即可:
self.priceLabel.textAlignment = NSTextAlignmentJustified; //兩端對齊

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 發現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,246評論 4 61
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,969評論 19 139
  • Git常用命令 配置用戶信息 新建代碼庫 增加文件 提交代碼 查看信息 遠程同步到GitHub 分支(在一個分支上...
    KIMDA閱讀 417評論 0 3
  • 沒有人能一路單純到底,但要記住,別忘了最初的自己。—— 幾米
    軒音閱讀 319評論 0 1
  • 游土族之鄉 眸弋 千年土谷渾,慕容何處尋? 青史唯轉輪,黃河仍向云。
    眸弋閱讀 704評論 0 2