【发布时间】:2019-04-30 12:05:02
【问题描述】:
看似简单的事情却变得非常困难。我已经在这里和 SnapKit GitHub 上浏览了多个主题,但未能解决我的问题。
我想让UITableViewCell 带有一个位于中间的标签,假设从单元格的顶部和底部开始都是 50。
值得一提的是,单元格是以编程方式创建的
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
self.addSubview(titleLabel)
titleLabel.snp.makeConstraints { (make) -> Void in
make.topMargin.equalToSuperview().offset(50.0)
make.left.equalToSuperview().inset(UIView.getValueScaledByScreenWidthFor(baseValue:10.0))
make.bottomMargin.equalToSuperview().offset(50.0)
}
}
在 ViewController 中,我尝试了自动单元格高度的两种方法:
extension EpisodeViewController: UITableViewDelegate {
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
}
和
tableView.estimatedRowHeight = 100
tableView.rowHeight = UITableViewAutomaticDimension
在viewDidLoad()方法中
我得到的是:
这三个单元格中的每一个都应填充“测试” - 相反,它已将相应单元格下方的标签向下推而不调整单元格的大小。
尝试了许多不同的组合,例如:
1) 将约束优先级设置为 999 - 无变化
2) 添加到 contentView 而不是 self - 根本不显示
3) 使用 top 而不是 topMargin 等 - 没有区别
你能告诉我这段代码有什么问题吗?在以编程方式创建的单元格中使用 SnapKit 时的一般经验法则是什么?应该根据约束自动调整其高度?
提前致谢
编辑
UITableViewDataSource 方法
extension EpisodeViewController: UITableViewDataSource {
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell: EpisodeHeaderCell = tableView.dequeueReusableCell(for: indexPath)
cell.viewModel = viewModel
return cell
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 3
}
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
}
【问题讨论】:
-
你有没有尝试给 UILabel 指定大小的字体?
-
@EmreÖnder 是的,我没有粘贴这部分代码,但您可以看到字体大小大于系统
-
你能把
cellForRowAt的代码贴出来吗? -
@CerlinBoss 当然,请参阅我编辑的问题,谢谢。
标签: ios swift uitableview autolayout snapkit