【发布时间】:2020-12-18 18:11:34
【问题描述】:
我有一个带有自定义 UITableViewCell 的 UITableView(具体来说,它是一个 SwipeTableViewCell)。我有一个笔尖文件,我在其中布置了(可重复使用的)单元格。一切都按预期工作,在我的设备上看起来很好。当我完成应用程序时,我注意到我对自定义视图没有约束(其他视图中的约束工作得很好)。因此,在添加缺少的约束后,我运行了该应用程序。所有字段(4 个 UITextFields、2 个 UIImageViews)都在单元格的左上角被“挤压”。我认为我做错了什么......删除了所有这些约束......重新运行,它再次看起来不错。在重新添加约束后,同样的事情发生了。我花了几天时间试图发现我做错了什么(这是我的第一个定制单元)。我找到了一个 SO 项目:Autolayout is ignored in Custom UITableViewCell
看起来和听起来都很好,但它与我所拥有的不符,也没有解决我的问题。我也试过不使用笔尖,而是直接将文本字段和图像视图添加到原型单元格......不幸的是,结果相同。我已经阅读了很多教程,但没有一个能解决我的问题。救命!!
class EducationTableViewController: SwipeTableViewController {
...
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = super.tableView(tableView, cellForRowAt: indexPath) as! EducationTableCell
let education = educations[indexPath.row]
cell.configurateTheCell(education)
return cell
}
...
}
和
class EducationTableCell: SwipeTableViewCell {
@IBOutlet weak var classNameLabel: UILabel!
override func prepareForReuse() {
super.prepareForReuse()
classNameLabel.text = nil
}
// MARK: Cell Configuration
func configurateTheCell(_ education: Education) {
Bundle.main.loadNibNamed("Education", owner: self, options: nil)
backgroundColor = UIColor(hexString: education.color)
let contrastingBgColor = UIColor.init(contrastingBlackOrWhiteColorOn: backgroundColor, isFlat: false)
classNameLabel.text = education.name
if (contrastingBgColor == UIColor.init(red: 0, green: 0, blue: 0, alpha: 1)) {
classNameLabel.textColor = K.Education.titleTextColor
} else {
classNameLabel.textColor = UIColor.yellow
}
classNameLabel.font = UIFont(name: K.UIConstants.fontNameBold, size: 35)
contentView.addSubview(classNameLabel)
...
}
}
我在 Storyboard 中为笔尖添加了约束。如果您查看上面的 SO 项目,您会看到我提到的“挤压”,但如果有帮助,我很乐意附上图片。
https://sites.google.com/view/schoolscheduler/home/junk
iOS:14.3 X代码:12.3 斯威夫特 5.3.2
【问题讨论】:
-
您发布的一小段代码看起来有问题。如果您为您的单元格创建一个 nib/xib 文件,则没有理由调用
.loadNibNamed(除非您在那里加载另一个 nib 视图?)。另外,如果你在 IB 中设计了你的单元,为什么在运行时添加classNameLabel作为子视图? -
嗯。我认为这是我在原型单元中看到视图时遗留下来的。让我修改并重新发布代码。
-
好吧,如果我省略 .loadNibNamed() 那么表中没有任何内容。我已经在 IB 中设计了单元格,但是当它不起作用时将其删除到笔尖(应用约束时视图也“挤压”)。我会贴一张我在 IB 中的照片,也许会更清楚。
-
嗯...有点混乱。您想要在 xib 中设计您的单元格吗?还是作为故事板原型?
-
好吧,我只想让它工作! ;-)。我切换回 IB,布置了单元格......在我添加第一个约束之前看起来不错,然后一切都移动到单元格的左上角(即挤压)。谷歌搜索我发现:medium.com/better-programming/…,我克隆并安装了....看起来不错。我仍在尝试看看他们做了我不做的事情。
标签: ios swift uitableview