我有一个自定义表格视图单元格,我想根据标签中的文本数量自动调整大小。
在我的表视图控制器中,我使用UITableViewAutomaticDimension
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
if indexPath.section == 0 {
if indexPath.row == 0 {
return 200
} else {
return 49
}
} else if indexPath.section == 1 {
return 100
} else if indexPath.section == 2 {
if indexPath.row == 0 {
return 200
} else {
return 400
}
} else {
return UITableViewAutomaticDimension
}
}
override func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
这就是我最终的结果。
答案 0 :(得分:0)
确保从子UIView
或您拥有的任何子元素中为contentView设置了top,bottom,trailing和leading余量的约束。这可能会对你有所帮助
在您的情况下,您需要定义从ReviewLabel到contentView的底部间距约束以使其工作。从相应的UILabel
开始,也需要顶部,尾部和前导边距。顶部空间可以从DateLabel定义,而前导和尾随空格可以从包含星星的UIView定义
为什么?
contentView需要知道它的子视图的框架才能使uitableviewautomaticdimension工作。如果它不知道它的子视图框架那么它就不知道自动调整大小的内容
答案 1 :(得分:0)
在委托函数中实现高度计算:
override func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
let cell = tableView.cellForRowAtIndexPath(indexPath)
let size = cell.contentView.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize)
return size.height + 1.0 // Add 1.0 for the cell separator height
}
答案 2 :(得分:0)
你需要:
myFunction();
//returns ["arg1 (default)", "arg2 = "bob" (default)"]
约束top, trailing, leading, bottom
numberOfLines = 0
和Content Compression Resistance Priority Vertical
Content Hugging Priority Vertical
self.tableView.estimatedRowHeight = MinControlSize;
设置文本后调用
self.tableView.rowHeight = UITableViewAutomaticDimension;
在委托方法
中cell.setNeedsDisplay();
cell.layoutIfNeeded();
希望这有帮助。我从Apple的自我调整示例中获取了这个