0

我正在将文本数据从 xml 加载到我今天的小部件标签,所以高度不能是静态的。由于字体大小为 17px,我计算出一行中最多有 30 个字符,因此我尝试像这样设置高度

int number_of_characters = [self.string length];
[label sizeToFit];
self.preferredContentSize = CGSizeMake(self.view.frame.size.width, (number_of_characters/30)*22+40);

我将 +40 添加到高度,因为我在小部件顶部有静态文本,并且由于字体大小为 17px,所以乘以 22 我假设两行之间有 5px 间距。

但这不起作用,我不知道为什么:(。还有其他方法可以使小部件高度动态化吗?

4

1 回答 1

0

试试这个代码:你给他发送'stirng'、'width'和字体。

- (CGFloat)heightForValue:(NSString *)value andWidth:(CGFloat)width andFont:(UIFont *)font{

    NSDictionary *attributesDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
                                          font, NSFontAttributeName,
                                          nil];

    CGRect frame = [value boundingRectWithSize:CGSizeMake(width, 999.0f)
                                       options:(NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading)
                                    attributes:attributesDictionary
                                       context:nil];
    //    CGSize size = [value sizeWithFont:font constrainedToSize:CGSizeMake(width, 99999.0f) lineBreakMode:NSLineBreakByWordWrapping];
    CGFloat result = frame.size.height;
    return result;
}

例子:

CGFloat height = [self heightForValue:@"This is example code." andWidth:250];
于 2015-01-24T12:20:50.480 回答