查找NSString的宽度作为CGFloat

时间:2014-08-17 22:29:55

标签: objective-c

我知道这已经发布了,但我找到的解决方案

-(CGFloat)widthOfText{
    CGRect idealFrame = [self.text boundingRectWithSize:self.frame.size
                                           options:NSStringDrawingUsesLineFragmentOrigin
                                         attributes:@{ NSFontAttributeName:self.font }
                                            context:nil];

    return idealFrame.size.width;
}

自我是一个UILabel

没有工作。

我试图在字符串的末尾放置一个按钮,所以我需要字符串的宽度来计算按钮的绝对位置

任何人都可以解释为什么这不起作用或提出不同的方法吗?

1 个答案:

答案 0 :(得分:3)

一个或多个输入不符合您的预期,NSLog() self.textself.frameself.font - 基本调试。

传递参数比使用ivars更好,这样可以更轻松地进行测试。它还消除了对类的依赖。

正常工作的示例:

NSString *text = @"1235";
CGSize frameSize = CGSizeMake(300, 50);
UIFont *font = [UIFont systemFontOfSize:12];

CGRect idealFrame = [text boundingRectWithSize:frameSize
                                       options:NSStringDrawingUsesLineFragmentOrigin
                                    attributes:@{ NSFontAttributeName:font }
                                       context:nil];
NSLog(@"width: %0.1f", idealFrame.size.width);