UILabel(加删除线、多格式文本)
2016-05-30 本文已影响112人
天空中的球
¥88.88下班之前,发现有一个需求忘记加上去了,就是 UILabel 加删除线
如何实现呢,这个实际上就是加一条线的,继承一个 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 啦。