首先,感谢您阅读我的问题。
我有一个包含委托和UITableView数据源的类。我有一个数组,其中包含所有使用的数据。在本课程中,我使用 2种类型的单元格(“ LabelImageTableViewCell ”是一个具有1个图像和1个标签的简单自定义单元格,而“ LabelTableViewCell ”是一个简单的自定义单元格(带有1个标签)。
当indexpath.row == 0时,我需要使用一个自定义单元格;对于所有其他情况,我需要使用另一个单元格。在出现问题时使用该模型,我只是将文本居中并以粗体显示。当它是答案时,我什么也不做。
这是我的课程:
import UIKit
class ServicesTableViewController: NSObject, UITableViewDelegate, UITableViewDataSource {
private let grayColor = UIColor(red:0.95, green:0.95, blue:0.95, alpha:1.0)
private let grayAnswerColor = UIColor(red:0.90, green:0.90, blue:0.90, alpha:1.0)
var data = [
ServicesModel(information: "Question 1", isHeader: true),
ServicesModel(information: "Answer 1", isHeader: false),
ServicesModel(information: "Question 2", isHeader: true),
ServicesModel(information: "Answer 2", isHeader: false)
]
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return data.count + 1
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if indexPath.row == 0 {
guard let cell = tableView.dequeueReusableCell(withIdentifier: LabelImageTableViewCell.cellType, for: indexPath) as? LabelImageTableViewCell else { return UITableViewCell() }
cell.displayInformation(title: "services_and_hours".localized(), img: #imageLiteral(resourceName: "ServicesPhoto"))
return cell
} else {
guard let cell = tableView.dequeueReusableCell(withIdentifier: LabelTableViewCell.cellType, for: indexPath) as? LabelTableViewCell else { return UITableViewCell() }
if data[indexPath.row - 1].isHeader {
cell.informationLabel.textAlignment = .center
cell.informationLabel.font = UIFont.boldSystemFont(ofSize: 16.0)
cell.displayInformation(data[indexPath.row - 1].information, (textColor: .black, backgroundColor: grayAnswerColor))
} else {
cell.displayInformation(data[indexPath.row - 1].information, (textColor: .black, backgroundColor: grayColor))
}
return cell
}
}
}
我的问题是,当我滚动时,答案的文本突然对准中间,就好像是一个问题。
这是奇怪的行为:
答案 0 :(得分:3)
当它是答案时,我什么也不做。
这就是问题所在。单元被重用。因此,答案单元曾经是一个问题单元。而且您什么也不做,不会让它看起来像个问题。
你在说
cell.informationLabel.textAlignment = .center
在if情况下。但是在其他情况下,您永远不会说要向左对齐。因此,当重用居中的单元格时,它只会保持居中状态。
类似地表示粗体而不是粗体。
答案 1 :(得分:2)
问题是您为isHeader
设置了 textAlignment ,但没有为非标题单元格设置任何对齐方式。由于重复使用了相同类型的单元格,因此需要同时设置if
和else
的所有属性。请看下面:
if data[indexPath.row - 1].isHeader {
cell.informationLabel.textAlignment = .center
cell.informationLabel.font = UIFont.boldSystemFont(ofSize: 16.0)
cell.displayInformation(data[indexPath.row - 1].information, (textColor: .black, backgroundColor: grayAnswerColor))
} else {
cell.informationLabel.textAlignment = .left
cell.informationLabel.font = UIFont.systemFont(ofSize: 16.0)
cell.displayInformation(data[indexPath.row - 1].information, (textColor: .black, backgroundColor: grayColor))
}