我创建了一个自定义UITableViewCell类,如下所示:
import UIKit
class SortByMenuTableViewCell: UITableViewCell {
var cellTextLabel: UILabel = {
let label = UILabel()
label.numberOfLines = 1
label.textAlignment = .left
label.translatesAutoresizingMaskIntoConstraints = false
return label
}()
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
contentView.addSubview(cellTextLabel)
NSLayoutConstraint.activate([
cellTextLabel.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 10),
cellTextLabel.leftAnchor.constraint(equalTo: contentView.leftAnchor, constant: 10),
cellTextLabel.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -10)
])
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func awakeFromNib() {
super.awakeFromNib()
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
}
}
然后我将上面的tableViewCell添加到下面的ViewController中,该ViewController包含UITableView元素:
import UIKit
class SortByPopOverVC: UIViewController, UITableViewDelegate, UITableViewDataSource {
var tableViewRowsInsideSectionsArray = ["Section Designation","Depth, h","Width, b","Area of Section, A"]
var sortByTableView = UITableView()
var cellsWidthsArray: [CGFloat] = []
override func viewDidLoad() {
super.viewDidLoad()
sortByTableView.delegate = self
sortByTableView.dataSource = self
sortByTableView.translatesAutoresizingMaskIntoConstraints = false
sortByTableView.register(SortByMenuTableViewCell.self, forCellReuseIdentifier: "customCell")
sortByTableView.isScrollEnabled = false
view.addSubview(sortByTableView)
}
override func viewWillLayoutSubviews() {
NSLayoutConstraint.activate([
sortByTableView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor),
sortByTableView.leftAnchor.constraint(equalTo: self.view.leftAnchor),
sortByTableView.bottomAnchor.constraint(equalTo: sortByTableView.topAnchor, constant: sortByTableView.contentSize.height),
sortByTableView.widthAnchor.constraint(equalToConstant: 200)
])
sortByTableView.widthAnchor.constraint(equalToConstant: cellsWidthsArray.max()!).isActive = true
print("Cell widths array = \(cellsWidthsArray)")
}
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return tableViewRowsInsideSectionsArray.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = sortByTableView.dequeueReusableCell(withIdentifier: "customCell") as! SortByMenuTableViewCell
cell.cellTextLabel.text = tableViewRowsInsideSectionsArray[indexPath.row]
cell.cellTextLabel.sizeToFit()
if cell.cellTextLabel.frame.size.width != 0 {
cellsWidthsArray.append(cell.cellTextLabel.frame.size.width)
}
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
dismiss(animated: true, completion: nil)
}
}
从上面的UIViewController代码中可以看出,我创建了一个Array,它将保存TableView中包含的所有单元格宽度的值。之后我要实现的是将UITableVIew的宽度设置为等于Array内部的最大单元宽度。
但是,当我在控制台中打印出Array的值以检查是否已将单元格宽度附加到Array时,我才发现在那找到了它们。但是,当我尝试将widthAnchor再设置一次等于数组中的最大值时,我收到一条错误消息,说“展开时未找到”
我如何将UITableView的宽度设置为等于其内部单元格的最大宽度,对您有所帮助吗?