我在故事板中有自定义单元格的tableview
小区标识符为:MyCustomCellIdentifier
标签的框架为:{ { 15.0f, 178.0f }, { 280.0f, 40.0f } }
我基本上想根据文字的大小改变UILabel的框架。
假设我的UILabel在我的StoryBoard中被标记为1
在功能中:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyCustomCellIdentifier"];
UILabel *myLabel = [(UILabel *)[cell viewWithTag:1];
NSLog(@"frame %@", NSStringFromCGRect(myLabel.frame)); //frame {{0, 295}, {0, 0}}
myLabel.text = @"myText";
CGSize maximumLabelSize = CGSizeMake(FLT_MAX, myLabel.frame.size.height);
CGSize expectedLabelSize = [myLabel.text sizeWithFont:myLabel.font constrainedToSize:maximumLabelSize lineBreakMode:NSLineBreakByTruncatingTail];
CGRect newFrame = myLabel.frame;
newFrame.size.width = expectedLabelSize.width;
myLabel.frame = newFrame;
NSLog(@"frame %@", NSStringFromCGRect(myLabel.frame)); //frame {{0, 295}, {80, 0}}
return cell;
}
为什么有0个值而不是故事板中的实际值? 如何初始化标签的框架以获得正确的值?
为什么我以编程方式设置值并不会更改显示的标签框?
当我向下滚动并向后滚动回到上一个单元格时,它实际显示的是正确的框架,但在第一次显示时却没有。
答案 0 :(得分:2)
这是自动布局开启的结果(默认情况下启用)。要修复它,您可以关闭自动布局,或使用约束而不是设置框架来更改标签的大小。我不清楚为什么你要这样设置标签的宽度 - 如果你只是将它设置为"尺寸适合内容"在IB中,它会自动调整大小以适应文本(无论如何都在宽度方向上)。