简体   繁体   English

表视图未显示在视图 Controller

[英]TableView Not Showing on View Controller

I am trying to display a UITableView and its cells in a UIViewController but I am not seeing the UITableView appear in the UIViewController. I am trying to display a UITableView and its cells in a UIViewController but I am not seeing the UITableView appear in the UIViewController. My AutoLayout constraints have the table set to appear underneath the "My Trips" UILabel.我的 AutoLayout 约束将表格设置为显示在“我的旅行”UILabel 下方。 I've added the delegate and data source, not sure what I'm missing here.我已经添加了委托和数据源,不确定我在这里缺少什么。

在此处输入图像描述

class TripsViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
    
    //components
    let viewTitle = UILabel()
    let tripsTableView = UITableView()
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        setup()
        style()
        layout()
    }
}


extension TripsViewController {
    
    func setup(){
        tripsTableView.delegate = self
        tripsTableView.dataSource = self
    }
    
    func style() {
        view.backgroundColor = .systemBackground
        
        viewTitle.translatesAutoresizingMaskIntoConstraints = false
        viewTitle.text = "My Trips"
        viewTitle.font = UIFont.preferredFont(forTextStyle: .title1)
        
        tripsTableView.translatesAutoresizingMaskIntoConstraints = false
    }
    
    func layout() {
        view.addSubview(viewTitle)
        view.addSubview(tripsTableView)
        
        NSLayoutConstraint.activate([
            viewTitle.leadingAnchor.constraint(equalToSystemSpacingAfter: view.safeAreaLayoutGuide.leadingAnchor, multiplier: 2),
            viewTitle.topAnchor.constraint(equalToSystemSpacingBelow: view.safeAreaLayoutGuide.topAnchor, multiplier: 2),
            tripsTableView.leadingAnchor.constraint(equalToSystemSpacingAfter: view.safeAreaLayoutGuide.leadingAnchor, multiplier: 2),
            tripsTableView.topAnchor.constraint(equalToSystemSpacingBelow: viewTitle.bottomAnchor, multiplier: 2)
        ])
    }
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 5
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = UITableViewCell()
        cell.textLabel?.text = "This is row \(indexPath.row)"
        return cell
    }
}

you are super close here.你在这里超级近。 The issue lies with your constraints.问题在于你的限制。

        NSLayoutConstraint.activate([
        viewTitle.leadingAnchor.constraint(equalToSystemSpacingAfter: view.safeAreaLayoutGuide.leadingAnchor, multiplier: 2),
        viewTitle.topAnchor.constraint(equalToSystemSpacingBelow: view.safeAreaLayoutGuide.topAnchor, multiplier: 2),
        tripsTableView.leadingAnchor.constraint(equalToSystemSpacingAfter: view.safeAreaLayoutGuide.leadingAnchor, multiplier: 2),
        tripsTableView.topAnchor.constraint(equalToSystemSpacingBelow: viewTitle.bottomAnchor, multiplier: 2),
        tripsTableView.rightAnchor.constraint(equalToSystemSpacingAfter: self.view.rightAnchor, multiplier: 1),
        tripsTableView.heightAnchor.constraint(equalToConstant: 200)
    ])

you can see here I added in a right anchor and a height of 200.你可以在这里看到我添加了一个正确的锚点和 200 的高度。

Table View Appears.表视图出现。

Good Luck祝你好运

Add Trailing and Bottom constraints for your table view:为表格视图添加尾随和底部约束:

    NSLayoutConstraint.activate([
        viewTitle.leadingAnchor.constraint(equalToSystemSpacingAfter: view.safeAreaLayoutGuide.leadingAnchor, multiplier: 2),
        viewTitle.topAnchor.constraint(equalToSystemSpacingBelow: view.safeAreaLayoutGuide.topAnchor, multiplier: 2),
        tripsTableView.leadingAnchor.constraint(equalToSystemSpacingAfter: view.safeAreaLayoutGuide.leadingAnchor, multiplier: 2),
        tripsTableView.topAnchor.constraint(equalToSystemSpacingBelow: viewTitle.bottomAnchor, multiplier: 2),
        
        // add these constraints
        view.safeAreaLayoutGuide.trailingAnchor.constraint(equalToSystemSpacingAfter: tripsTableView.trailingAnchor, multiplier: 2),
        view.safeAreaLayoutGuide.bottomAnchor.constraint(equalToSystemSpacingBelow: tripsTableView.bottomAnchor, multiplier: 2),
    ])

I needed to change the UIViewController to a UITableViewController since I am using static cells (for now) in my code.我需要将 UIViewController 更改为 UITableViewController 因为我在我的代码中使用 static 单元格(现在)。 I also overrode the numberOfRowsInSection and cellForRowAt functions.我还覆盖了numberOfRowsInSectioncellForRowAt函数。

Changed改变了

class TripsViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

to

class TripsViewController: UITableViewController {

You need to set trailing and bottom(or height) constraints as well.您还需要设置尾随和底部(或高度)约束。 It will set a correct frame of tableview.它将设置正确的表格视图框架。

Snippet:片段:

tripsTableView.trailingAnchor.constraint(equalToSystemSpacingAfter: view.safeAreaLayoutGuide.trailingAnchor, multiplier: 2), tripsTableView.bottomAnchor.constraint(equalToSystemSpacingBelow: view.safeAreaLayoutGuide.bottomAnchor, multiplier: 2) tripsTableView.trailingAnchor.constraint(equalToSystemSpacingAfter: view.safeAreaLayoutGuide.trailingAnchor, multiplier: 2), tripsTableView.bottomAnchor.constraint(equalToSystemSpacingBelow: view.safeAreaLayoutGuide.bottomAnchor, multiplier: 2)

Note: Set multiple as per your need注意:根据需要设置多个

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM