UITableView 不在 UIView 容器内滚动

Posted

技术标签:

【中文标题】UITableView 不在 UIView 容器内滚动【英文标题】:UITableView not scrolling within a UIView container 【发布时间】: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 个单元格,每个单元格中都有一个静态标签。 你能提供截图吗? 【参考方案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()

以上是关于UITableView 不在 UIView 容器内滚动的主要内容,如果未能解决你的问题,请参考以下文章

Swift:使用 prepareForSegue 将 UIView 容器的高度设置为嵌入式 UITableView 的高度

在 UIView 内对 UITableView 设置约束

UITableView 部分标题内的下拉 UIView

UIScrollview 中的 UIView 中的 UITableView :点击时 UITableView 数据被清除

UITableView 不在 UIScrollView 内滚动

如何在容器(UIView)内居中对齐 2 个 UIView,而不将它们放在 UIView 内