UILabel(加刪除線、多格式文本)

下班之前,發(fā)現(xiàn)有一個(gè)需求忘記加上去了,就是 UILabel 加刪除線

¥88.88

如何實(shí)現(xiàn)呢,這個(gè)實(shí)際上就是加一條線的,繼承一個(gè) UILabel ,然后 drawRect:

- (void)drawRect:(CGRect)rect {
    
    [super drawRect:rect];
    // 上下文
    CGContextRef context = UIGraphicsGetCurrentContext();
    // 顏色
    [self.textColor setStroke];
    // 線的起點(diǎn)
    CGFloat y = rect.size.height * 0.5;
    CGContextMoveToPoint(context, 0, y);
    // 字體寬度
    CGSize size = [self.text sizeWithAttributes:@{NSFontAttributeName: self.font}];
    // 線的終點(diǎn)
    CGContextAddLineToPoint(context, size.width, y);
    // 渲染
    CGContextStrokePath(context);
    
}

然后正常使用了就 OK 了。

然后,又想想平常 UILabel 還有什么不是本身自帶的呢?多文本格式、顯示換行、計(jì)算文本高度

** 多文本格式 **


88.88元
- (NSAttributedString *)makeTheAmountNumber:(NSString *)amountStr {
    
    NSString * lastStr = [NSString stringWithFormat:@"%@ 元",amountStr];
    NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:lastStr];
    [attributedString addAttribute:NSForegroundColorAttributeName value:[UIColor orangeColor] range:NSMakeRange(0, amountStr.length)];
    return attributedString.copy;
}
self.testLabel.attributedText = [self makeTheAmountNumber:@"88.88"];

** 顯示換行 **

label.numberOfLines = 0;

** 計(jì)算文本高度 **

/**
 *  @param upperSize 最大的 Size 
              CGSizeMake([UIScreen mainScreen].bounds.size.width, 2000)
              CGSizeMake(1000,[UIScreen mainScreen].bounds.size.height)

 */
- (CGSize)string:(NSString *)string rectSize:(CGSize)upperSize font:(UIFont *)aFont
{
    CGSize labelsize = CGSizeZero;
    // 默認(rèn)都支持 iOS7 以上啊
    NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:aFont, NSFontAttributeName, nil];
    
    labelsize = [string boundingRectWithSize:upperSize
                                     options:\
                 NSStringDrawingTruncatesLastVisibleLine |
                 NSStringDrawingUsesLineFragmentOrigin |
                 NSStringDrawingUsesFontLeading
                                  attributes:dic
                                     context:nil].size;
    return labelsize;
}

注意上述 upperSize 就 OK 了,一般是求高度,用 CGSizeMake([UIScreen mainScreen].bounds.size.width, 2000), OK 啦。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容