i have one table view as popUpTableView, in that i need to set table view height as dynamically as per no of rows. i am adding in cellForRowAtIndexpath
popupTableView.height = popupTableView.contentSize.height
it is working fine but the problem is when no of cells are increasing then the tableview height is increasing than its origingal height
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
}
how to get tableview height for only visible cells and where to place that code ??
Thanks in Advance.
Try adding the code to adjust the height in
viewWillLayoutSubviews
method. Try thisUse this in your
viewdidLoad()
of the popuptableview:popupTableView.estimatedRowHeight = 120
and create a function for setting height for automatic dimension :
take one variable which will caluculate bottomconstraint value of tableview
call delegate method willDisplay: of tableview
To get the dynamic height for
UITableViewCell
returnUITableViewAutomaticDimension
as your row height .Example : ( In My Case )
In that case don't forget to use AutoLayout , For more Info See Here