【问题标题】:Cannot see table view in scroll view在滚动视图中看不到表格视图
【发布时间】:2021-03-18 21:25:31
【问题描述】:

我正在尝试将表格视图添加到我的滚动视图中:

class ViewController: UIViewController {
    
    let tableView = UITableView()

    override func viewDidLoad() {
        super.viewDidLoad()

        let scrollView = UIScrollView()
        scrollView.backgroundColor = .red

        
        view.addSubview(scrollView)
        scrollView.translatesAutoresizingMaskIntoConstraints = false
        NSLayoutConstraint.activate([
            scrollView.topAnchor.constraint(equalTo: view.topAnchor),
            scrollView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
            scrollView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
            scrollView.bottomAnchor.constraint(equalTo: view.bottomAnchor)
        ])
        
        scrollView.addSubview(tableView)
        
        tableView.backgroundColor = .yellow
        tableView.translatesAutoresizingMaskIntoConstraints = false
        NSLayoutConstraint.activate([
            tableView.topAnchor.constraint(equalTo: scrollView.topAnchor),
            tableView.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor),
            tableView.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor),
            tableView.trailingAnchor.constraint(equalTo: scrollView.trailingAnchor)
        ])
        
        scrollView.contentSize = CGSize(width: view.bounds.width, height: 2000)
    }


}

但是它没有显示。它只显示滚动视图背景颜色。我在这里做错了什么?

【问题讨论】:

  • UITableView 继承自 UIScrollView。您在 ScrollView 中添加 ScrollView。这是意料之中的。为什么要在 ScrollView 中添加 TableView?
  • 滚动视图不是问题。如果我把它改成 UIView 还是不行
  • 根据您的代码,没有理由做您正在做的事情(除非您只是好奇结果如何)。您可以将表格视图添加到滚动视图,但您已将表格视图完全叠加在滚动视图上,这使得滚动视图无用。如果您要以编程方式进行此操作,则应该在 loadView 中添加子视图,而不是 viewDidLoad

标签: ios swift uiscrollview


【解决方案1】:

这就是您测试中的所有代码吗?您还没有设置 tableview 的数据源和委托,也没有返回任何单元格,因此它不会显示任何内容。

【讨论】:

    【解决方案2】:

    问题是NSLayoutConstraint中tableView的约束。

    tableView.topAnchor.constraint(equalTo: scrollView.topAnchor),
    tableView.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor),
    tableView.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor),
    tableView.trailingAnchor.constraint(equalTo: scrollView.trailingAnchor)
    

    你使用 view.bottomAnchor 或任何其他代替scrollView,如:

    tableView.topAnchor.constraint(equalTo: view.topAnchor),
    tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
    tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
    tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor)
    

    这将显示您的 tableView。现在你可以尝试解决将tableView放在scrollView中引起的其他问题。

    【讨论】:

      【解决方案3】:

      不要在Tableview下使用Scrollview,这会让scrollview无用。当您填满表格时,Tableview 具有内置的滚动视图(种类),如果表格行很多并且超出您的屏幕,则自动启用 tableview 中的滚动视图。所以,只使用 tableview。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-05-04
        • 2013-12-30
        • 2011-12-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多