Ios 无法在tableView:cellForRowAtIndexPath:方法中设置标签框
无法在Ios 无法在tableView:cellForRowAtIndexPath:方法中设置标签框,ios,uitableview,ios7,uilabel,Ios,Uitableview,Ios7,Uilabel,无法在ableView:cellForRowAtIndexPath:方法中设置tableViewCell中的标签框架。事实上,如NSLog中所示,标签的框架已更改,但未显示在视图上我希望标签(绿色背景)应该比图片中的高,这样可以显示其中的所有文本。带有标识符的原型单元“单元”在情节提要中创建。任何帮助都将不胜感激 ps:Xcode 5.0.2,iOS7 - (void)viewDidLoad { [super viewDidLoad]; NSString * str = @"Do
ableView:cellForRowAtIndexPath:
方法中设置tableViewCell
中的标签框架。事实上,如NSLog
中所示,标签的框架已更改,但未显示在视图上我希望标签(绿色背景)应该比图片中的高,这样可以显示其中的所有文本。带有标识符的原型单元
“单元”在情节提要
中创建。任何帮助都将不胜感激
ps:Xcode 5.0.2,iOS7
- (void)viewDidLoad
{
[super viewDidLoad];
NSString * str = @"Do any additional setup after loading the view, typically from a nib Do any additional setup after loading the view, typically from a nib Do any additional setup after loading the view, typically from a nib";
NSArray *array = [NSArray arrayWithObjects:str, str, str , str, str, str, nil];
}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
NSInteger row = indexPath.row;
CGSize sizeConstraint = CGSizeMake(tableView.frame.size.width, 2000);
CGSize size = [[array objectAtIndex:row] boundingRectWithSize:sizeConstraint options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName: [UIFont fontWithName:FontName size:FontSize]} context:nil].size;
return size.height + 20;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
NSInteger row = indexPath.row;
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
UILabel *label = (UILabel *)[cell.contentView viewWithTag:1];
label.autoresizingMask = UIViewAutoresizingNone;
label.numberOfLines = 0;
label.lineBreakMode = NSLineBreakByWordWrapping;
label.font = [UIFont fontWithName:FontName size:FontSize];
label.backgroundColor = [UIColor greenColor];
label.text = [array objectAtIndex:row];
CGSize sizeConstraint = CGSizeMake(tableView.frame.size.width, 2000);
CGSize size = [label.text boundingRectWithSize:sizeConstraint options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName: label.font} context:nil].size;
CGRect rect = label.frame;
rect.size.height = size.height;
[label setFrame:rect];
NSLog(@"label height :%f", label.frame.size.height);
[label sizeThatFits:sizeConstraint];
return cell;
}
当您滚动表格视图时,您可以看到第一个和第二个单元格中的标签现在显示良好。(在这里,我只是滚动出两个单元格并将它们拉回来。)
在您的帖子中,我找不到用于设置标签框架的labelBible定义
使用“约束”可以快速:
及
这样,您就不必在-(UITableViewCell*)tableView:(UITableView*)tableView cell for rowatinexpath:(nsindepath*)indepath
方法中执行任何操作
编辑:要使用约束:必须选中使用自动布局
希望它能正常工作。只需从标签框架的文件检查器中取消选中自动布局。@iDev然后您就可以看到tableview的分隔线ClearySet bound而不是frame为什么要使用[label sizeThatFits:sizeConstraint]代码>设置框架后?@NicolasBonnet我尝试过解决问题,但不起作用。@CoolMonster似乎不起作用。您是否尝试过:[label setFrame:cell.frame]
?[label setFrame:cell.frame]不起作用。为什么不能呢。和“所选视图没有约束。在构建时,将为视图生成显式的左、顶、宽和高约束。”我无法设置标签的约束…我通过取消选中序列图像板中我的UILable的“使用自动布局”属性修复了我的问题。在这篇文章中,我找到了添加标签约束的解决方案。如果我取消选中“使用自动布局”,我问题中的代码工作得很好:)谢谢你的回答:)