使用自定义单元格和不可滚动的表格时调整tableView高度

时间:2016-07-06 17:32:46

标签: ios swift uitableview

我遇到的问题是我使用自我调整单元格,估计行高。

我的tableview是一个滚动视图中不可滚动的表。我有一个表高度的变量,我最初设置为0.

我正在尝试将表格高度更新为正确的大小,具体取决于填充它的单元格数量以及这些单元格将占用的大小。我正在尝试使用tableview.contentSize.height来获取表格高度并将变量设置为该大小。

然后我回想起我的对齐功能来重置表格高度。当我构建并运行表时,大小不足以显示它应该显示的所有单元格。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

您可以通过以下步骤执行此操作 - >

  1. 使用0前导,上下,尾随常量
  2. 在UIView中构建tableview
  3. 添加UIView的高度限制并定义它的出口
  4. enter image description here  3.在tableview中加载数据并获取tableview的ContentHeight

    1. 更新UIView的高度约束等于tableview的ContentHeight
    2.   

      不要忘记在更新约束

      后调用layoutIfNeeded()
      class ViewController: UIViewController {
      
          @IBOutlet weak var containerViewHeightConstraint: NSLayoutConstraint!
          @IBOutlet weak var nameTableView: UITableView!
      
          var dataArrary = [String]()
          override func viewDidLoad() {
              super.viewDidLoad()
              nameTableView.rowHeight = UITableViewAutomaticDimension
              nameTableView.estimatedRowHeight = 44.0
              nameTableView.tableFooterView = UIView(frame:CGRectZero)
              nameTableView.tableHeaderView = UIView(frame:CGRectZero)
              dataArrary = ["item1 bshfklsdflkjsdfkljsdklfjlsdkfjlksdjflksdjflkdsjflkdsjflksdjflkjdslkfjdslkjflkdsfjdsfkljsdflkjdslkfj", "item2hfdshjgfhjdsgfhjdgfhjdgfhjdgfhjgfhsdf", "item3", "item4", "item5", "item6kfjdskfljsdlkfjlksdfjlksdjfkldsjfklfjdkslf"]
      
          }
      
          override func viewDidAppear(animated: Bool) {
      
              updateView()
          }
      
          func updateView() {
      
              self.nameTableView.scrollEnabled = false
      
              self.nameTableView.frame.size = CGSizeMake(self.view.frame.width, self.nameTableView.contentSize.height)
              containerViewHeightConstraint.constant = self.nameTableView.frame.height 
             // assign height equal to the tableView's Frame
              self.view.layoutIfNeeded()  
             // redraws views and subviews with updated constraint
      
          }
      }
      
      extension ViewController:UITableViewDataSource {
      
          func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
      
              return dataArrary.count
          }
      
          func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
              let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as UITableViewCell
               cell.textLabel?.numberOfLines = 0
              cell.textLabel?.text = dataArrary[indexPath.row]      
              return cell  
          } 
      
      }
      
      1. 看起来应该是这样的
      2. enter image description here