iphone - UILabel 中文本的像素宽度

标签 iphone objective-c uilabel

我需要画一个划线的 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/

相关文章:

iphone - 如何向 UILabel 添加填充?

ios - 有没有办法以编程方式让 UILabel 确定其内在内容大小

iphone - 从另一个类更改 UILabel 的文本

iphone - 动态替换 TabBar 项

iphone - presentPopoverFromRect 导致我的应用程序卡住

ios - 全局变量不能正常工作

iphone - performSegueWithIdentifier 触发但不加载下一个 View

iphone - UINavigationBar 自定义色调停止按钮点击颜色更改

ios - Firebase 不适用于真实设备 (iOS)

java - 哪种语言/框架适用于 HPC : Java/.Net/Delphi/C/C++/Objective-C?