我有一个简单的Tableview,它有动态单元格。
每个单元格有3个元素(问题为UILabel - 答案为UITextView - 读取为UIButton )
我只需要在每个单元格中显示来自Answer的2行,当我点击read more按钮时,单元格的高度应根据答案textview字符动态变化。
这是我的呼叫表格单元格方法:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
tableCell = myTable.dequeueReusableCellWithIdentifier("fqaCell") as! fqaTableViewCell
myTable.estimatedRowHeight = 100
myTable.rowHeight = 100
return tableCell!
}
答案 0 :(得分:1)
首先,您不应该从rowHeight
方法调用cellForRowAtIndexPath
,因为每个单元格都会调用它,并在表格视图中应用所有单元格。
使用方法tableView:heightForRowAtIndexPath:
和tableView:estimatedHeightForRowAtIndexPath:
来配置单个单元格。
其次,你应该为你迄今为止尝试过的东西付出一些努力,但我想尝试这些方法会给你提示如何完成你所要求的。
答案 1 :(得分:0)
首先设置textview约束到textview说是=> 80
并且在将其设置为textView时也限制了答案字符串的数量..这样在阅读时我们可以获得更多的实际全长答案..将高度约束拖到表格视图单元格中...并阅读更多按钮单击这样做
//code
@IBAction func readMoreBtn(_ sender: UIButton) {
let indexPath = IndexPath(row: sender.tag, section: 0)
let cell = tableView.cellForRow(at: indexPath) as! AnswersCell
if(cell.answerTextView.text.count < answerList[sender.tag].answer.count){
cell.answerHeightConstraints.isActive = false
tableView.beginUpdates()
cell.answerTextView.addConstraint(NSLayoutConstraint(item:cell.answerTextView, attribute: NSLayoutAttribute.height, relatedBy: NSLayoutRelation.greaterThanOrEqual, toItem: nil, attribute: NSLayoutAttribute.notAnAttribute, multiplier: 1, constant: 80))
cell.answerTextView.text = alertsFeedList[sender.tag].answer
cell.readMoreBtnOfCell.isHidden = true
tableView.endUpdates()
}
您必须将按钮拖动到单元格作为插座,并在表格视图中将其作为操作拖动。在cellForRowAt
执行此操作cell.readMoreBtnOfCell.tag = indexPath.row
答案 2 :(得分:-1)
首先要实现这一点,在viewDidLoad方法中将rowHeight初始化为UITableViewAutomticDimension,并将estimatedRowHeight初始化为100(根据您的代码)。这将有助于根据其内容调整单元格的大小。现在,如果你想显示lable的整个文本,那么将lable的numberOfLine设置为0,否则2.为了实现这一点,维护一个字典或数组来存储bool状态所有单元格的read more按钮。单击按钮时切换其值,然后重新加载tableview或重新加载相应的单元格。希望这会帮助你。 :)