我通过编程方式创建了一个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 { }
这在前导和尾端产生了奇怪的单元格插图:
真正奇怪的是:如果我在情节提要中创建一个空的tableView(而不是通过编程方式将其添加到视图中),那么一切都很好!
这是情节提要的组成部分,其中一个iBOutlet指向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")
}
}
我不敢相信没有这个错误就无法完全以编程方式创建tableView。 我是否错过了tableView上的参数?
答案 0 :(得分:2)
这是因为cellLayoutMarginsFollowReadableWidth
。只需将其添加到您的设置代码中即可。
tableView.cellLayoutMarginsFollowReadableWidth = false