在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; //兩端對齊