【问题标题】:How to set dynamic table height based on table row?如何根据表格行设置动态表格高度?
【发布时间】:2020-03-24 03:07:06
【问题描述】:

我在运行时面临桌子高度问题。

我的超级视图中添加了一个滚动视图。在滚动视图上,我在顶部添加了一个 UIView,然后在 UIView 之后我放置了一个 UITableView(scrollEnabled false)并再次在我的 UITableView 底部添加了一个 UIView。

问题:我希望用户在屏幕上进行一次滚动,所以我禁用了表格视图滚动属性。现在我的问题是我从服务器获取表数组数据,所以在从服务器获取数据后,我的 viewDidLayoutSubviews 方法没有在我编写表高度逻辑的地方被调用。当我重新加载同一个屏幕时,一切正常。

这是我的代码:

override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()

        if devicesArray.count != 0{
            viewDeviceList.frame = CGRect(x: viewDeviceList.frame.origin.x, y: viewDeviceList.frame.origin.y, width: viewDeviceList.frame.size.width, height: tableDeviceList.contentSize.height)

            tableDeviceList.reloadData()
        }

    }

任何人都可以在这方面给我建议。谢谢。

【问题讨论】:

  • 所以你想要一个根据行动态增长和收缩的表视图?如果是这样,您可以执行类似的操作:stackoverflow.com/a/55068380/10473781
  • 当你从服务器获取数据时:试试 tableView.reloadData() 然后 self.view.layoutIfNeeded()
  • 嗨@KeshuRai我在下面添加了self.view.layoutIfNeeded() 来重新加载我的tableview。但是table view的高度不对。
  • 我更喜欢这种结构:imgur.com/X2jybHZ。这样您就不必担心高度和滚动视图。 Tableview 会处理一切。
  • 好的,你能检查一下我的viewDidLayoutSubviews的逻辑吗?我说的对吗?

标签: ios swift uitableview uiscrollview row-height


【解决方案1】:

请尝试以下代码并告诉我。我正在与观察者合作,它的工作非常完美。

//MARK:- Add this observer into your View/Controlloer
        override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
            self.transactionTableViewHeightConstraints.constant = transactionTableView.contentSize.height
        }
//MARK:- Fetch TableListData
    func updateTableViewHeightAfterAPICall(){
            self.transactionTableView.addObserver(self, forKeyPath: "contentSize", options: [], context: nil)
            self.transactionTableView.reloadData()
            UIView.animate(withDuration: 0.5) {
                self.view.layoutIfNeeded()
            }
        }

【讨论】:

    【解决方案2】:

    像这样为 tableView 高度约束创建出口

    @IBOutlet weak var tableViewHeightConstraint: NSLayoutConstraint!
    

    添加这一行

    self.tableView.reloadData()
    self.tableViewHeightConstraint.constant = self.tableView.contentSize.height
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-15
      • 1970-01-01
      • 2016-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多