我有一个表视图作为popUpTableView,因为我需要动态设置表视图高度,而不是行数。 我正在添加cellForRowAtIndexpath
popupTableView.height = popupTableView.contentSize.height
它工作正常,但问题是当没有细胞增加时,tableview高度增加而不是其原始高度
extension DiagnosisViewController :UITableViewDataSource {
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if tableView == diagnosisTableView {
return self.diagnosisModel.count
} else if tableView == popupTableView {
return self.popupDiagnosisModel.count
}
return 0
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
var cell:DiagnosisTableViewCell?
if tableView == self.diagnosisTableView {
cell = self.diagnosisTableView.dequeueReusableCell(withIdentifier: "DiagnosisCell") as? DiagnosisTableViewCell
if diagnosisModel.count > 0 {
let model = diagnosisModel[indexPath.row]
cell?.indexLabel.text = String(indexPath.row + 1)
cell?.diagnosisNameLabel.text = " \(model.diagnosisDescription!)"
cell?.deleteButton.tag = indexPath.row
cell?.deleteButton.addTarget(self, action:#selector(deleteDiagnosis(button:)), for: .touchUpInside)
diagnosisNotFoundLabel.isHidden = true
}
} else if tableView == self.popupTableView {
cell = self.diagnosisTableView.dequeueReusableCell(withIdentifier: "DiagnosisCell") as? DiagnosisTableViewCell
cell?.deleteButton.isHidden = true
if (indexPath.row % 2 == 0) {
cell?.baseView.backgroundColor = UIColor.white
}
else {
cell?.baseView.backgroundColor = UIColor.init(colorLiteralRed: 241/255, green: 241/255, blue: 241/255, alpha: 1.0)
}
cell?.indexLabel.text = String(indexPath.row + 1)
cell?.indexView.layer.cornerRadius = (cell?.indexView.frame.size.width)!/2
cell?.indexView.layer.borderWidth = 0.5
cell?.indexView.layer.borderColor = UIColor.lightGray.cgColor
cell?.baseView.layer.borderWidth = 0.5
cell?.baseView.layer.cornerRadius = 5.0
cell?.baseView.layer.borderColor = UIColor.lightGray.cgColor;
if diagnosisModel.count > 0 {
let model = popupDiagnosisModel[indexPath.row]
cell?.diagnosisNameLabel.text = " \(model.diagnosisDescription!)"
}
self.popupTableView.height = self.popupTableView.contentSize.height
}
return cell!
}
}
let maxHeight = popupTableView.frame.size.height
let changeHeight = popupTableView.contentSize.height
if changeHeight < maxHeight {
popupTableView.height = changeHeight
}
如何仅获取可见单元格的tableview高度以及放置该代码的位置?
先谢谢。
答案 0 :(得分:1)
在popuptableview的viewdidLoad()
中使用此功能:
popupTableView.estimatedRowHeight = 120
并创建一个设置自动尺寸高度的函数:
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
答案 1 :(得分:0)
要使UITableViewCell
返回UITableViewAutomaticDimension
的动态高度作为行高。
示例:(在我的情况下)
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
{
if indexPath.row == 0
{
return 200
}
else if indexPath.row == 1
{
return 10
}
else
{
return UITableViewAutomaticDimension
}
}
在这种情况下,请不要忘记使用自动布局,有关详细信息See Here
答案 2 :(得分:0)
尝试添加代码以viewWillLayoutSubviews
方法调整高度。试试这个
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
let maxHeight = popupTableView.frame.size.height
let changeHeight = popupTableView.contentSize.height
if changeHeight < maxHeight {
popupTableView.height = changeHeight
}
}
答案 3 :(得分:0)
取一个变量来计算tableview的底部约束值
var bottomConstraintValue : CGFloat = 0.0
override func viewDidLoad() {
super.viewDidLoad()
bottomConstraintValue = self.popupContainerView.height - self.popupTableView.frame.origin.y - self.popupTableView.frame.size.height
}
调用委托方法willDisplay:of tableview
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
if tableView == popupTableView {
if indexPath.row == (popupTableView.indexPathsForVisibleRows?.last)?.row {
adjustTableViewHieght(popupTableView: self.popupTableView,popupContainerView: self.popupContainerView , bottomConstraintValue: self.bottomConstraintValue)
}
}
}
func adjustTableViewHieght(popupTableView: UITableView,popupContainerView: UIView , bottomConstraintValue:CGFloat){
let contentSizeHeight = popupTableView.contentSize.height;
let tableViewHieghtWithBottomSpace = popupContainerView.height - popupTableView.frame.origin.y
let actualTableViewHieght = (tableViewHieghtWithBottomSpace - bottomConstraintValue)
if (contentSizeHeight > actualTableViewHieght) {
popupTableView.height = actualTableViewHieght
} else {
popupTableView.height = contentSizeHeight
}
}