2017-07-03 117 views
0

我有一個表視圖作爲popUpTableView,因爲我需要設置表視圖高度動態爲每行的行數。 我加入中的cellForRowAtIndexPath動態設置tableview高度並將其限制爲swift 3?

popupTableView.height = popupTableView.contentSize.height 

它工作正常,但問題是在沒有細胞的不斷增加,則實現代碼如下高度比其origingal高度的增加

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

請參考以下鏈接:HTTPS://stackoverflow.com/questions/40034506/how-to-resize-table-cell-based-on-textview/40035858#40035858 – Jay

+0

謝謝,但我試圖限制表視圖高度只有可見行 –

+0

@BhagyashreeMyanamwar你有答案嗎? –

回答

1

使用此在您的popuptableview的viewdidLoad()

popupTableView.estimatedRowHeight = 120

和自動尺寸設置高度創建一個函數:

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 
    return UITableViewAutomaticDimension 
} 
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

+1

這會給出第一行和第二行的具體高度 –

+0

是的,我提到'在我的情況',因爲@Bhagyashree沒有給出他的完整源代碼,我希望他能處理其餘的。 @ Samarth – Roy

+0

btw。 。謝謝@Samarth,我編輯了我的代碼。 – Roy

0

嘗試添加代碼來調整高度viewWillLayoutSubviews方法。試試這個

override func viewWillLayoutSubviews() { 
    super.viewWillLayoutSubviews() 
    let maxHeight = popupTableView.frame.size.height 
    let changeHeight = popupTableView.contentSize.height 

    if changeHeight < maxHeight { 
    popupTableView.height = changeHeight 
    } 
} 
0

採取一個變量,它caluculate的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的bottomconstraint值的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 
     } 
    }