iOS 富文本

UILabel(加删除线、多格式文本)

2016-05-30  本文已影响112人  天空中的球

下班之前,发现有一个需求忘记加上去了,就是 UILabel 加删除线

¥88.88

如何实现呢,这个实际上就是加一条线的,继承一个 UILabel ,然后 drawRect:

- (void)drawRect:(CGRect)rect {
    
    [super drawRect:rect];
    // 上下文
    CGContextRef context = UIGraphicsGetCurrentContext();
    // 颜色
    [self.textColor setStroke];
    // 线的起点
    CGFloat y = rect.size.height * 0.5;
    CGContextMoveToPoint(context, 0, y);
    // 字体宽度
    CGSize size = [self.text sizeWithAttributes:@{NSFontAttributeName: self.font}];
    // 线的终点
    CGContextAddLineToPoint(context, size.width, y);
    // 渲染
    CGContextStrokePath(context);
    
}

然后正常使用了就 OK 了。

然后,又想想平常 UILabel 还有什么不是本身自带的呢?多文本格式、显示换行、计算文本高度

** 多文本格式 **


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;

** 计算文本高度 **

/**
 *  @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;
    // 默认都支持 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 啦。

上一篇下一篇

猜你喜欢

热点阅读