以编程方式添加了UITableView中的错误单元格插图

时间:2018-07-23 15:58:15

标签: ios swift uitableview

我通过编程方式创建了一个tableViewController,如下所示:

import UIKit

class ViewController: UIViewController {

    private var tableView: UITableView!
    var elements = [1, 2, 3, 4, 5].map { "Elément \($0)" }


    // MARK: - View controller life cycle
    override func viewDidLoad() {
        super.viewDidLoad()

        tableView = UITableView(frame: .zero, style: .grouped)
        tableView.dataSource = self
        tableView.delegate = self
        view.addSubview(tableView)

        tableView.register(UITableViewCell.self, forCellReuseIdentifier: "BasicTableViewCell")

        // Pin tableView to view
        tableView.translatesAutoresizingMaskIntoConstraints = false
        tableView.topAnchor.constraint(equalTo: view.topAnchor, constant: 0).isActive = true
        tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 0).isActive = true
        tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 0).isActive = true
        tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: 0).isActive = true
    }
}


extension ViewController: UITableViewDataSource {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 5
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let element = elements[indexPath.row]
        let cell = tableView.dequeueReusableCell(withIdentifier: "BasicTableViewCell")!
        cell.textLabel?.text = element
        cell.accessoryType = .disclosureIndicator
        return cell
    }
}

extension ViewController: UITableViewDelegate { }

这是情节提要,大部分为空: storyboard_empty

这在前导和尾端产生了奇怪的单元格插图:

iPad landscape_wrong


真正奇怪的是:如果我在情节提要中创建一个空的tableView(而不是通过编程方式将其添加到视图中),那么一切都很好!

这是情节提要的组成部分,其中一个iBOutlet指向tableView。 storyboard_tableView

这是现在的课程(我没有添加扩展名,它们没有改变)

class ViewController: UIViewController {

    @IBOutlet weak var tableView: UITableView!
    var elements = [1, 2, 3, 4, 5].map { "Elément \($0)" }


    // MARK: - View controller life cycle
    override func viewDidLoad() {
        super.viewDidLoad()

        tableView.dataSource = self
        tableView.delegate = self
        tableView.register(UITableViewCell.self, forCellReuseIdentifier: "BasicTableViewCell")
    }
}

结果: iPad_landscape_correct

我不敢相信没有这个错误就无法完全以编程方式创建tableView。 我是否错过了tableView上的参数?

1 个答案:

答案 0 :(得分:2)

这是因为cellLayoutMarginsFollowReadableWidth。只需将其添加到您的设置代码中即可。

tableView.cellLayoutMarginsFollowReadableWidth = false