UItableviewcell中的多行UIlabel使用Autolayout
Posted
技术标签:
【中文标题】UItableviewcell中的多行UIlabel使用Autolayout【英文标题】:Multiple line UIlabel in UItableviewcell using Autolayout 【发布时间】:2015-01-24 07:17:30 【问题描述】:我已将setMaXPreferredLayoutWidth
设置为UILabel
并将所有必需的约束添加到UIlabel
现在我可以在UItableviewcell
中看到多行UIlabel
但我的问题是我在顶部得到了额外的填充并且我的UIlabel
的底部基于MaxpreferredLayoutWidth
值。
当我将MaxPreferreLayoutWidth
设置为 200 时,我得到了这个
当我将 MaxPreferreLayoutWidth
设置为 100 时,我得到了这个
一般UIlabel
的高度取决于preferredMaxLayoutWidth
。
谁能告诉我如何删除这个额外的填充并呈现UIlabel
的确切高度?
【问题讨论】:
为了让事情更清楚,我在我的代码中使用了自动布局。 【参考方案1】:试试这个代码,
CGSize suggestedSize = [textWithMultipleLines sizeWithFont:myLabel.font constrainedToSize:CGSizeMake(width, FLT_MAX) lineBreakMode:NSLineBreakByWordWrapping];//here "width" is the maximum acceptable width of myLabel
CGRect labelFrame = myLabel.frame;
labelFrame.size = suggestedSize;
[myLabel setFrame:labelFrame];
在
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
//get the string assigned to label
CGSize suggestedSize = [stringAssignedToLabel sizeWithFont:myLabel.font constrainedToSize:CGSizeMake(width, FLT_MAX) lineBreakMode:NSLineBreakByWordWrapping];
return suggestedSize.height+5;
【讨论】:
我在我的代码中使用了自动布局。但是在你的代码截图中你要求我设置框架。有没有办法使用自动布局来解决它?【参考方案2】:最简单的方法是扩展你自己的 UITableViewCell 类,并在那里创建一个 UILabel,同时创建一个公共 getMethod:
界面:
- (CGFloat)getLabelHeight;
实施:
- (CGFloat)getLabelHeight
return label.frame.size.height
表格视图文件:
-(CGFloat)heightForRowAtIndexPath
return [cell getLabelHeight]
- (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath)indexPath
your_cell_instance = [[Your_Cell_Class alloc]initWithTableViewCellStyle:UITableViewCellStyleDefault andReuseID:your_reuse_id];
your_cell_instance.text = @"Your Long Text"
[your_cell_instance setNumberOfLines:0];
[your_cell_instance sizeToFit];
return your_cell_instance;
重要的是首先设置标签的文本,然后 // 行数和 sizeToFit //
您需要适时重新加载 tableView 数据
我没有时间测试它,但我希望它有效。
【讨论】:
我在我的代码中使用了自动布局,由于某些原因我无法在我的代码中禁用自动布局。有没有办法在启用自动布局的情况下解决它?【参考方案3】:我们必须在计算heightForRowAtIndexPath
中单元格的高度时设置tableviewcell的框架@
例如:
[tableViewCell setFrame:CGRectMake(0, 0, CGRectGetWidth(self.tableView.bounds), CGRectGetHeight(tableViewCell.bounds))];
然后在UItableviewcell
的layoutSubviews
方法中我们必须设置preferredMaxLayoutwidth
例如:
[self.multilineLabel setPreferredMaxLayoutWidth:CGRectGetWidth(self.bounds)];
【讨论】:
以上是关于UItableviewcell中的多行UIlabel使用Autolayout的主要内容,如果未能解决你的问题,请参考以下文章
UItableviewcell中的多行UIlabel使用Autolayout
在 UITableViewCell 中的 detailTextLabel 中添加多行
iOS 9 上的静态 UITableViewCell 中的多行 UILabel
UITableViewCell 中的几个多行标签,情节提要 xcode 6.3.2 中的自动布局