无法在 tableView:cellForRowAtIndexPath: 方法中设置标签框
Posted
技术标签:
【中文标题】无法在 tableView:cellForRowAtIndexPath: 方法中设置标签框【英文标题】:Failed to set label frame in tableView:cellForRowAtIndexPath: method 【发布时间】:2014-02-20 13:38:25 【问题描述】:tableViewCell
中标签的边框不能在ableView:cellForRowAtIndexPath:
方法中设置。事实上,如NSLog
所示,标签的框架已更改,但未显示在视图中。 我希望标签(绿色背景)应该比图片中的要高,这样可以显示其中的所有文字。 Prototype Cell
和 Identifier
“单元格”是在 storyboard
中创建的。任何帮助将不胜感激。
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;
当您滚动tableView
时,您可以看到第一个和第二个单元格中的标签现在显示良好。 (这里我只是滚动出两个单元格并将它们拉回来。)
【问题讨论】:
@iDev 然后就可以清楚的看到tableview的分隔线了 设置绑定而不是框架 设置框架后为什么要使用[label sizeThatFits:sizeConstraint];
?
@NicolasBonnet 我试过解决问题,但没有用。
@CoolMonster 好像不行。
【参考方案1】:
在您的帖子中,我没有找到您用来设置标签框架的 labelBible 的定义。
使用约束很快:
和
通过这种方式,您不必在 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
方法中执行任何操作。
编辑:使用约束:Use Autolayout
必须被选中。
希望它能如你所愿。
【讨论】:
你试过了吗:[label setFrame:cell.frame]
?
[label setFrame:cell.frame] 不起作用。为什么不能。并且“选定的视图没有约束。在构建时,将为视图生成显式的左侧、顶部、宽度和高度约束。”我无法设置标签的约束...
我通过取消选中情节提要中我的 UILable 的 Use Autolayout 属性解决了我的问题。
***.com/questions/18911986/… 这个帖子我找到了添加标签约束的解决方案。
如果我取消选中使用自动布局,我的问题中的代码效果很好:) 感谢您的回答:)【参考方案2】:
只需从标签框架的文件检查器中取消选中自动布局即可。
【讨论】:
以上是关于无法在 tableView:cellForRowAtIndexPath: 方法中设置标签框的主要内容,如果未能解决你的问题,请参考以下文章
无法在 SQL Server 视图中使用工作查询:“IS”无法识别“>”无法识别
React 无法编译模块未找到:无法在listingDetail 上解析