iOS今日小部件自动高度

时间:2015-01-23 21:06:42

标签: ios objective-c ios8-today-widget

我将文本数据从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,因此我认为在两行之间存在5px空格。

但是这不起作用,我无法解释原因:(。是否有其他方法可以使小部件高度动态化?

1 个答案:

答案 0 :(得分:0)

试试这段代码: 你给他发了'字符串','宽度'和字体。

- (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];