tableView居中于其父视图时不出现

时间:2018-10-10 18:34:07

标签: ios swift autolayout tableview

我有一个带有以下(静态)tableView的viewController:

class viewController: UIViewController, UITableViewDelegate {

    private let tableView: UITableView = {
    let tv = UITableView()
    tv.separatorStyle = .singleLine
    tv.allowsSelection = true
    tv.isScrollEnabled = false
    return tv
    }()

    private let tableData = ["row1", "row2", "row3", "row4"]

    override func viewDidLoad() {
        super.viewDidLoad()

        tableView.translatesAutoresizingMaskIntoConstraints = false
        tableView.delegate = self
        tableView.tableFooterView = UIView()
        view.addSubview(tableView)

        NSLayoutConstraints.activate([
            tableView.centerXAnchor.constraints(equalTo: view.safeAreaLayoutGuide.centerXAnchor),
            tableView.centerYAnchor.constraints(equalTo: view.safeAreaLayoutGuide.centerYAnchor)
       )]
    }

        func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
            let cell = UITableViewCell(style: .subtitle, reuseIdentifier: "cell")
            cell.textLabel!.text = tableData[indexPath.row]
            return cell
        }

        func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return tableData.count
        }
}

当我运行应用程序时,此viewController会显示一个空白屏幕。我知道设置表格视图约束的方式就是问题所在,因为当我使用topAnchorbottomAnchorleftAnchorrightAnchor(以及进行其他一些调整)。知道为什么应用程序会以这种方式运行吗?

2 个答案:

答案 0 :(得分:1)

您的表格视图可能在那里并且居中,但是您没有定义尺寸,因此它的宽度和高度可能设置为零,这就是为什么您看不到它的原因。

您可以通过对其宽度和高度设置约束来解决此问题,该约束可以是常量,也可以与其父视图相关,具体取决于您想要的内容。

答案 1 :(得分:0)

问题是这不是静态表视图。如果是这样,您将不会实现cellForRowAt。这是一个普通的表视图,它需要一个数据源和委托。加上它需要一个高度和一个宽度。