【问题标题】:hide table view cell and remove table view space隐藏表格视图单元格并删除表格视图空间
【发布时间】:2019-02-27 14:41:33
【问题描述】:

我正在尝试隐藏表格视图并删除空间。但是表视图空间没有被删除。当第一次用户来到这个页面时,表格视图中没有数据,所以我写 ishidden=true.table hidden 但空间不删除。用户手动添加数据和表格视图出现。添加后正常工作数据 。 我在努力

self.tableView.tableFooterView = UIView()
self.tableView.ishidden=true

以上代码表隐藏但不删除表空间。那么如何删除隐藏表格视图的空间..

【问题讨论】:

  • 这种情况需要更新tableview的frame。
  • 您需要添加UITableView高度约束,当没有数据时将UITableView高度约束更改为0,当再次有数据时更改UITableView高度约束。
  • 空格”是什么意思?你是说空单元格吗?
  • 把整个代码贴在你写这段代码的地方
  • 您是否将 iOS 中的“隐藏”视为 Android 中的 Visibility.Gone,它还包装了内容?如果是这样,那不是 iOS 视图的工作方式。视图占用的“空间”及其可见性在 iOS 中是完全不相关的属性。

标签: ios swift uitableview swift3 uitableviewrowaction


【解决方案1】:

您需要为表格视图设置高度约束。 设置高度的最佳位置是 numberOfSectionsInTableView 函数。 此函数在每次重新加载数据时调用一次。

//Assuming your data source
var dataSource: [String] = []

//connect this outlet to tableViewHeight Constraint
@IBOutlet var tableViewHeight: NSLayoutConstraint!

//connect this outlet to tableView
@IBOutlet var tableView: UITableView!

func numberOfSections(in tableView: UITableView) -> Int {

    //need to check the data availability
    if self.dataSource.count == 0{
        //need to set the table height constraint to zero
        self.tableViewHeight.constant = 0
        self.tableView.isHidden = true
        return 0
    }
    else {
        //need to set the table height constraint to desired frame.
        self.tableViewHeight.constant = self.view.frame.size.height //Assuming full screen.
        self.tableView.isHidden = false
        return 1

    }

【讨论】:

    【解决方案2】:

    如果你只是想隐藏 tableView 那么只需将 tableView.alpha 设置为 0 并禁用 tableView 交互。您可以在情节提要层次结构中的 tableview 之前设置无数据视图,然后使用 tableview alpha 值进行管理以隐藏和显示无数据视图

    【讨论】:

      【解决方案3】:

      你可以在tableview contentSizeobserver key 的帮助下完成。为此,你必须取 tableview 高度的 Outlet 并设置到 tableView 观察者方法中。 设置 tableView 滚动禁用。

       override func viewWillAppear(_ animated: Bool) {
      
              tbl.addObserver(self, forKeyPath: "contentSize", options: [.new], context: nil)
          }
      
          override func viewWillDisappear(_ animated: Bool) {
              super.viewWillDisappear(animated)
      
              tbl.removeObserver(self, forKeyPath: "contentSize")
          }
      
      
          override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
              if object is UITableView {
                  print("contentSize:= \(tbl.contentSize.height)")
                  self.heightTbl.constant = tbl.contentSize.height
              }
          }
      

      希望这会对您有所帮助。

      【讨论】:

      • tableView 的高度