如何在自定义 tableView Cell 中调整标签高度和宽度
Posted
技术标签:
【中文标题】如何在自定义 tableView Cell 中调整标签高度和宽度【英文标题】:How to adjust label height and width in custom tableView Cell 【发布时间】:2016-10-07 07:27:14 【问题描述】:我有一个可展开的 tableView,当我展开一个部分时,其中有三个单元格。在第 5 个单元格中只有名称,在第 2 个单元格中。它的内容很大。现在我想根据内容自动调整这个标签的高度和宽度。
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
let cell = tblView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! CustomTableViewCell
let dataArrayTblView = dataArrayForTableView
let titleName = dataArrayTblView.valueForKey("name")
let dueDate = dataArrayTblView.valueForKey("deadlinedate")
let description = dataArrayTblView.valueForKey("description")
cell.titleLabel.text = titleName[indexPath.row] as AnyObject! as! String!
cell.dueDateLabel.text = dueDate[indexPath.row] as? String
cell.descriptionLabel.text = description[indexPath.row] as? String
cell.descriptionLabel.sizeToFit()
cell.textLabel?.backgroundColor = UIColor.clearColor()
cell.selectionStyle = .None
return cell
但没有获得完整的内容
【问题讨论】:
我没有得到完整的描述。 ***.com/questions/39888512/… 我没有使用 AutoLayout。 试试这个 cell.descriptionLabel.adjustsFontSizeToFitWidth = true 【参考方案1】:尝试设置它。它会自动为您调整行的高度。如果它不起作用,那么您的情节提要中的约束有问题。
override func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat
return 40
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
return UITableViewAutomaticDimension
【讨论】:
使用此功能后,我的截止日期和描述单元格丢失了 你有多少行?根据您的回答,我猜您在表格视图方面做错了。 我只有三行 第一行和第二行只有一个行标签 但是对于第三行我有一个标签。我想根据内容自动调整它,我从 API 获得的内容【参考方案2】:您应该使用UITableViewAutomaticDimension
作为行高,
// this should be set in viewDidload
tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 140
为此,您必须使用autolayout
并应为单元格中的标签设置正确的constraints
。
约束应该在线性链中,我的意思是你的标签的顶部和底部都必须设置约束,你的标签应该根据内容调整大小,这样你的单元格就会相应地调整大小!
您可以参考Self-sizing Table View Cells by Raywenderlich!
【讨论】:
使用后,它只显示Title,DueDate和Description不显示【参考方案3】:把下面的viewDidLoad和设置autolayout按照下面的截图。
tblview.rowHeight = UITableViewAutomaticDimension
tblview.estimatedRowHeight = 44
Screenshot 1
Screenshot 2
Screenshot 3
Screenshot 4
【讨论】:
不幸的是我没有使用 AutoLayout。有第二选择吗?【参考方案4】:使用heightForRowAtIndexPath
方法调整行高。计算
使用boundingRectWithSize
这个方法的字符串大小。示例:
试试这个:
if let YOUR_STRING:NSString = str as NSString?
let sizeOfString = ns_str.boundingRectWithSize(
CGSizeMake(self.titleLabel.frame.size.width, CGFloat.infinity),options: NSStringDrawingOptions.UsesLineFragmentOrigin, attributes: [NSFontAttributeName: lbl.font], context: nil).size
【讨论】:
要返回什么值? 这个方法将返回 CGRect 而你只返回 sizeOfString.height 因为最后我得到的是带有 .size 的 CGSize 值以上是关于如何在自定义 tableView Cell 中调整标签高度和宽度的主要内容,如果未能解决你的问题,请参考以下文章
如何在自定义滑动(而不是滑动删除)单元格(滑动到邮件/短信)中点击一个单元格时删除在其他 TableView 单元格中添加的子视图
iOS tableViewCell 在自定义高度方法中遇到的问题,cell高度为0,cell显示不出来,cell直接显示第几个而不是...cell显示个数不对
cell.contentView systemLayoutSizeFittingSize:不适用于动态高度tableview