【问题标题】:UITableView not scrolling within a UIView containerUITableView 不在 UIView 容器内滚动
【发布时间】:2017-07-19 02:42:38
【问题描述】:

我是一个快速的初学者,我遇到了以下问题。

我在 UIView 容器中显示 UITableView 就好了。

问题是表格不会向上/向下滚动。

我已经阅读了一个稍微类似的问题的线程,它指向正确显示的完整表格,但它被 UIView 容器的大小裁剪,因此不需要滚动它,因为所有单元格都在显示.

所以我的问题是,如何将表格的高度调整为在 View 容器的范围内,以便它可以滚动?

这是我的视图控制器代码:

我在这里声明一个 UIView 的出口

@IBOutlet weak var viewOrdersDrinks: UIView!

然后我在 viewDidLoad 中调用这个函数,它将 UITableView 作为子视图加载到 UIView 中。

    func loadOrdersDrinks(){

    let listDrinks: CompletedOrderedDrinksListTableViewController = CompletedOrderedDrinksListTableViewController (nibName: "CompletedOrderedDrinksListTableViewController", bundle: nil)

    self.addChildViewController(listDrinks)
    self.viewOrdersDrinks.addSubview(listDrinks.view)

}

【问题讨论】:

  • 你检查了contentSize 的tableview 吗?
  • 你到底是什么意思? - 目前表格只是一个占位符,显示 8 个单元格,每个单元格中都有一个静态标签。
  • 你能提供截图吗?

标签: swift uitableview


【解决方案1】:

首先,您必须自动布局 tableView 以填充父级,这是一个 UIView 扩展:

extension UIView {
    func anchorToSuperview() {
        guard let superview = self.superview else { return }
        self.translatesAutoresizingMaskIntoConstraints = false
        self.topAnchor.constraint(equalTo: superview.topAnchor).isActive = true
        self.bottomAnchor.constraint(equalTo: superview.bottomAnchor).isActive = true
        self.leadingAnchor.constraint(equalTo: superview.leadingAnchor).isActive = true
        self.trailingAnchor.constraint(equalTo: superview.trailingAnchor).isActive = true
    }
}

要提的另一件事是,除了将tableViewController 添加为子项之外,您还必须尊重其他与添加子视图控制器相关的 API 调用。这是对documentation 的引用。

总而言之,为了正确添加 tableView,你的代码最终应该是这样的:

func loadOrdersDrinks() {
    let listDrinks: CompletedOrderedDrinksListTableViewController = CompletedOrderedDrinksListTableViewController (nibName: "CompletedOrderedDrinksListTableViewController", bundle: nil)

    self.addChildViewController(listDrinks)
    self.viewOrdersDrinks.addSubview(listDrinks.tableView)
    self.listDrinks.tableView.anchorToSuperview()
    self.listDrinks.didMove(toParentViewController: self)
}

【讨论】:

  • 感谢您的建议,尽管我已尝试将其与我的代码集成,但在这些行中出现 CompletedOrderDetailsViewController has no member listDrinks 错误 'self.listDrinks.view.anchorToSuperview() self.listDrinks .didMove(toParentViewController: self)'
  • 将我的 tableViewController 调用扩展到“extension CompletedOrderedDrinksListTableViewController: UIView”会给出“不能从 UIView 类继承”
  • 为了清楚起见,我有一个 TableViewController,我想将它加载到一个单独的 ViewController 中管理的 UIView 中。
  • 更新了我的代码,对于 UITableViewController,它必须是 self.listDrinks.tableView 而不是视图。但你必须知道这一点。
  • 似乎可以通过删除 self 并仅使用 listDrinks.tableView.anchorToSuperview()
猜你喜欢
  • 2017-05-12
  • 2011-07-26
  • 1970-01-01
  • 2015-10-31
  • 1970-01-01
  • 1970-01-01
  • 2011-09-28
  • 1970-01-01
  • 2010-10-20
相关资源
最近更新 更多