Eri*_*rik 77 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
Run Code Online (Sandbox Code Playgroud)
会发生的事情是,UILabel的线条与整个标签一样长,但文本可以更短.有没有办法确定文本的长度(以像素为单位),以便可以适当地绘制线条?
我也对任何其他解决方案持开放态度,如果已知:)
最好的,Erik
小智 194
NSString有一个sizeWithAttributes:方法,可以用于此目的.它返回一个CGSize结构,因此您可以执行与以下内容类似的操作来查找标签内文本的宽度.
CGSize textSize = [[label text] sizeWithAttributes:@{NSFontAttributeName:[label font]}];
CGFloat strikeWidth = textSize.width;
Run Code Online (Sandbox Code Playgroud)
在iOS7之前,您必须使用sizeWithFont:方法.
CGSize textSize = [[label text] sizeWithFont:[label font]];
CGFloat strikeWidth = textSize.width;
Run Code Online (Sandbox Code Playgroud)
UILabel有一个字体属性,您可以使用它来动态获取标签的字体详细信息,就像我上面所做的那样.
希望这可以帮助 :)
Aks*_*Aks 66
一个更好的解决方案,在Swift中:
更新:
用于Swift 3/4:
@IBOutlet weak var testLabel: UILabel!
// in any function
testLabel.text = "New Label Text"
let width = testLabel.intrinsicContentSize.width
let height = testLabel.intrinsicContentSize.height
print("width:\(width), height: \(height)")
Run Code Online (Sandbox Code Playgroud)
旧答案:
yourLabel?.text = "Test label text" // sample label text
let labelTextWidth = yourLabel?.intrinsicContentSize().width
let labelTextHeight = yourLabel?.intrinsicContentSize().height
Run Code Online (Sandbox Code Playgroud)