我需要画一个划线的 UILabel。因此,我将 UILabel 子类化并实现如下:
@implementation UIStrikedLabel
- (void)drawTextInRect:(CGRect)rect{
[super drawTextInRect:rect];
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextFillRect(context,CGRectMake(0,rect.size.height/2,rect.size.width,1));
}
@end
发生的情况是,UILabel 被划线,一行与整个标签一样长,但文本可以更短。 有没有办法以像素为单位确定文本的长度,以便可以适本地绘制线条?
如果知道的话,我也愿意接受任何其他解决方案:)
最好, 埃里克
最佳答案
NSString 有一个 sizeWithAttributes:可用于此的方法。它返回一个 CGSize 结构,因此您可以执行类似于以下的操作来查找标签内文本的宽度。
iOS 7 及更高版本
CGSize textSize = [[label text] sizeWithAttributes:@{NSFontAttributeName:[label font]}];
CGFloat strikeWidth = textSize.width;
iOS <7
在 iOS7 之前,您必须使用 sizeWithFont:方法。
CGSize textSize = [[label text] sizeWithFont:[label font]];
CGFloat strikeWidth = textSize.width;
UILabel 有一个字体属性,您可以使用它来动态获取标签的字体详细信息,就像我在上面所做的那样。
希望这会有所帮助:)
关于iphone - UILabel 中文本的像素宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1340667/