我已经子类了一个UILabel,我打算在许多不同的UITableViewCell中使用它。
在setText:中,我使用sizeWithFont来获得UILabel的动态高度。
这一切都很好,但是,在重新绘制单元格之前,子类UILabel的框架不会改变。我该如何克服这一切?
注意:在下面的代码中,由于使用if语句,重绘时大小不会改变。我把它拿出来做测试,在被重新绘制后发现它起了作用。
我认为它需要使用setNeedsDisplay或类似的工具,但它们也不起作用。
下面是我使用的代码:
- (void)setText:(NSString *)text
{
if (text != _text) {
// Adjust size to fit contents
//
CGSize maximumSize = CGSizeMake(CGRectGetWidth(self.frame), CGFLOAT_MAX);
CGSize predictedSize = [text sizeWithFont:self.font constrainedToSize:maximumSize lineBreakMode:self.lineBreakMode];
NSLog(@"Predicted size for \"%@\" (width: %f) is %@", text, self.frame.size.width, NSStringFromCGSize(predictedSize));
CGRect headlineDescriptionLabelFrame = self.frame;
headlineDescriptionLabelFrame.size = predictedSize;
NSLog(@"Old frame: %@", NSStringFromCGRect(self.frame));
[self setFrame:headlineDescriptionLabelFrame];
NSLog(@"New frame: %@", NSStringFromCGRect(self.frame));
_text = text;
}
}我的输出如下(关闭了上面的“if”):
2012-12-19 19:51:23.576 myApp[1099:c07] Predicted size for "Facebook's photo-sharing service Instagram denies that it has changed its privacy policy to allow it to sell users' photos to advertisers." (width: 172.000000) is {170, 75}
2012-12-19 19:51:23.578 myApp[1099:c07] Old frame: {{138, 46}, {172, 49}}
2012-12-19 19:51:23.578 myApp[1099:c07] New frame: {{138, 46}, {170, 75}}单元在这里重新加载
UILabel调整大小,并在第一个单元格重新加载后显示。
2012-12-19 19:51:30.018 myApp[1099:c07] Predicted size for "Facebook's photo-sharing service Instagram denies that it has changed its privacy policy to allow it to sell users' photos to advertisers." (width: 172.000000) is {170, 75}
2012-12-19 19:51:30.018 myApp[1099:c07] Old frame: {{138, 46}, {172, 49}}
2012-12-19 19:51:30.019 myApp[1099:c07] New frame: {{138, 46}, {170, 75}}单元在这里重新加载
2012-12-19 19:51:32.014 myApp[1099:c07] Predicted size for "Facebook's photo-sharing service Instagram denies that it has changed its privacy policy to allow it to sell users' photos to advertisers." (width: 170.000000) is {170, 75}
2012-12-19 19:51:32.014 myApp[1099:c07] Old frame: {{138, 46}, {170, 75}}
2012-12-19 19:51:32.015 myApp[1099:c07] New frame: {{138, 46}, {170, 75}}编辑
经过4天的努力,我仍然有问题,有人知道这是否是苹果的错误?其他人如何调整从UITableViewCell nib加载的UITableViewCell在cellForRowAtIndexPath:中的大小
发布于 2012-12-21 22:29:09
而不是‘在这里重新加载’,只需尝试
[tableView beginUpdates];
[tableView endUpdates];触发重新计算。没有真正重新加载它们的单元格高度,这是不必要的,因为您只更改了标签的文本。
发布于 2012-12-28 00:37:06
结果,我所需要做的就是将框架更改代码添加到layoutSubviews (以及超级方法[super layoutSubviews] )中。
https://stackoverflow.com/questions/13960112
复制相似问题