根据选择显示所有选定值的动态高度 MultipleSelectorRow
Dynamic Height MultipleSelectorRow as per selection to show all the values selected
我正在使用 Eureka 构建一个表单,其中我们 select 列表中的多个值,我们需要在表单上显示所有 selected 值。我为此使用了 MultipleSelectorRow,但没有选项可以根据内容动态增加单元格的大小。我们可以给定一个固定的高度,但在这里我需要为单元格分配一个动态高度。请指导如何实现这一目标?
我试过给定一个固定的高度,效果很好,但动态决定单元格的高度不起作用。我什至尝试实现 UITableViewAutomaticDimension 行高,但这也不起作用。
<<< MultipleSelectorRow("aprovers") { row in
row.title = "Approvers"
row.options = requestedByArr
row.selectorTitle = "Select Approvers"
row.onPresent({ from, to in
// Decode the value in row title
to.selectableRowCellSetup = { cell, row in
// cell.height = ({return 60})
let size = row.cell.contentView.systemLayoutSizeFitting(UILayoutFittingCompressedSize)
row.cell.height = { size.height }
//row.cell.height = ({return UITableViewAutomaticDimension})
row.cell.detailTextLabel?.numberOfLines = 0
row.cell.contentView.setNeedsLayout()
row.cell.contentView.layoutIfNeeded()
row.reload()
self.tableView.reloadData()
if let value = row.selectableValue {
row.title = value
}
}
to.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .done, target: from, action: #selector(CategoryGroups.multipleSelectorDone(_:)))
})
row.onChange({ (row) in
//row.cell.height = ({return 100})
let size = row.cell.contentView.systemLayoutSizeFitting(UILayoutFittingCompressedSize)
row.cell.height = { size.height }
//row.cell.height = ({return UITableViewAutomaticDimension})
row.cell.detailTextLabel?.numberOfLines = 0
row.cell.contentView.setNeedsLayout()
row.cell.contentView.layoutIfNeeded()
row.reload()
self.tableView.reloadData()
})
}```
The expected results should be increased in cell's height as per the selected number of values from the multipleSelectorRow but the actually the height doesn't increase. If it increases, then UI gets distorted and data merge into the upper row.
我们需要实施
tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 100
tableView.delegate = self
使用方法
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
override func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
return 100
}
并将以下方法添加到 MultipleSelectorRow
.cellSetup({ (cell, row) in
cell.detailTextLabel?.numberOfLines = 0
}).cellUpdate({ (cell, row) in
cell.detailTextLabel!.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
cell.detailTextLabel!.leftAnchor.constraint(equalTo: (cell.textLabel?.rightAnchor)!, constant: 15),
cell.detailTextLabel!.rightAnchor.constraint(equalTo: cell.contentView.rightAnchor, constant: -15),
cell.detailTextLabel!.bottomAnchor.constraint(equalTo: cell.contentView.bottomAnchor, constant: -15),
cell.detailTextLabel!.topAnchor.constraint(equalTo: cell.contentView.topAnchor, constant: 15)
])
cell.updateConstraintsIfNeeded()
})
无需为高度实现任何其他方法。这通过根据所选值动态增加多选择器行的高度解决了我的问题。
我正在使用 Eureka 构建一个表单,其中我们 select 列表中的多个值,我们需要在表单上显示所有 selected 值。我为此使用了 MultipleSelectorRow,但没有选项可以根据内容动态增加单元格的大小。我们可以给定一个固定的高度,但在这里我需要为单元格分配一个动态高度。请指导如何实现这一目标?
我试过给定一个固定的高度,效果很好,但动态决定单元格的高度不起作用。我什至尝试实现 UITableViewAutomaticDimension 行高,但这也不起作用。
<<< MultipleSelectorRow("aprovers") { row in
row.title = "Approvers"
row.options = requestedByArr
row.selectorTitle = "Select Approvers"
row.onPresent({ from, to in
// Decode the value in row title
to.selectableRowCellSetup = { cell, row in
// cell.height = ({return 60})
let size = row.cell.contentView.systemLayoutSizeFitting(UILayoutFittingCompressedSize)
row.cell.height = { size.height }
//row.cell.height = ({return UITableViewAutomaticDimension})
row.cell.detailTextLabel?.numberOfLines = 0
row.cell.contentView.setNeedsLayout()
row.cell.contentView.layoutIfNeeded()
row.reload()
self.tableView.reloadData()
if let value = row.selectableValue {
row.title = value
}
}
to.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .done, target: from, action: #selector(CategoryGroups.multipleSelectorDone(_:)))
})
row.onChange({ (row) in
//row.cell.height = ({return 100})
let size = row.cell.contentView.systemLayoutSizeFitting(UILayoutFittingCompressedSize)
row.cell.height = { size.height }
//row.cell.height = ({return UITableViewAutomaticDimension})
row.cell.detailTextLabel?.numberOfLines = 0
row.cell.contentView.setNeedsLayout()
row.cell.contentView.layoutIfNeeded()
row.reload()
self.tableView.reloadData()
})
}```
The expected results should be increased in cell's height as per the selected number of values from the multipleSelectorRow but the actually the height doesn't increase. If it increases, then UI gets distorted and data merge into the upper row.
我们需要实施
tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 100
tableView.delegate = self
使用方法
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
override func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
return 100
}
并将以下方法添加到 MultipleSelectorRow
.cellSetup({ (cell, row) in
cell.detailTextLabel?.numberOfLines = 0
}).cellUpdate({ (cell, row) in
cell.detailTextLabel!.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
cell.detailTextLabel!.leftAnchor.constraint(equalTo: (cell.textLabel?.rightAnchor)!, constant: 15),
cell.detailTextLabel!.rightAnchor.constraint(equalTo: cell.contentView.rightAnchor, constant: -15),
cell.detailTextLabel!.bottomAnchor.constraint(equalTo: cell.contentView.bottomAnchor, constant: -15),
cell.detailTextLabel!.topAnchor.constraint(equalTo: cell.contentView.topAnchor, constant: 15)
])
cell.updateConstraintsIfNeeded()
})
无需为高度实现任何其他方法。这通过根据所选值动态增加多选择器行的高度解决了我的问题。