标签:
在 iOS 中,使用 UILabel
添加中划线(即删除线)有几种方法。常见的方法是使用 NSAttributedString
来设置文本属性。以下是如何实现的两种主要方法:
方法一:使用 NSAttributedString
你可以使用 NSAttributedString
和 NSMutableAttributedString
来为 UILabel
的文本添加中划线。
// 创建 UILabel
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(20, 100, 280, 40)];
label.textAlignment = NSTextAlignmentCenter;
// 设置带有中划线的文本
NSString *text = @"这是一条中划线的文本";
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:text];
// 添加中划线属性
[attributedString addAttribute:NSStrikethroughStyleAttributeName
value:@(NSUnderlineStyleSingle)
range:NSMakeRange(0, text.length)]; // 整个文本添加中划线
label.attributedText = attributedString;
// 将 UILabel 添加到视图中
[self.view addSubview:label];
Objective-C
方法二:使用 Core Graphics 绘制
如果你需要更加自定义的方式,也可以重写 UILabel
的 drawTextInRect:
方法来手动绘制中划线。以下是一个简单的自定义 UILabel 示例:
@interface StrikethroughLabel : UILabel
@end
@implementation StrikethroughLabel
- (void)drawTextInRect:(CGRect)rect {
[super drawTextInRect:rect];
// 获取文本的绘制区域
CGSize textSize = [self.text sizeWithAttributes:@{NSFontAttributeName: self.font}];
CGFloat y = rect.origin.y + (rect.size.height - textSize.height) / 2; // 计算y位置
// 绘制中划线
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextMoveToPoint(context, rect.origin.x, y + (textSize.height / 2)); // 线的起始点
CGContextAddLineToPoint(context, rect.origin.x + textSize.width, y + (textSize.height / 2)); // 线的结束点
CGContextSetLineWidth(context, 1.0); // 设置线宽
CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor); // 设置线的颜色
CGContextStrokePath(context);
}
@end
Objective-C
使用自定义的 StrikethroughLabel
:
StrikethroughLabel *label = [[StrikethroughLabel alloc] initWithFrame:CGRectMake(20, 100, 280, 40)];
label.text = @"这是一条中划线的文本";
label.font = [UIFont systemFontOfSize:17];
label.textAlignment = NSTextAlignmentCenter;
// 将自定义 UILabel 添加到视图中
[self.view addSubview:label];
Objective-C
小结
NSAttributedString
: 这是添加中划线的最简单和最常用的方法,支持文本样式的灵活配置。- 自定义
UILabel
: 可以通过重写drawTextInRect:
自定义绘制以实现更复杂的效果。
标签: 来源:
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。