Что-то, казалось бы, простое оказалось действительно сложным. Я уже просмотрел несколько тем здесь и на 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()
метод
Что я получаю:
Каждая из этих трех ячеек должна быть заполнена «Test» - вместо этого она опустила метку под соответствующей ячейкой без изменения размера ячейки.
Пробовал много различных комбинаций, таких как:
1) Установка приоритета ограничения на 999 - без изменений
2) Добавление в contentView вместо self - вообще не отображается
3) Использование top вместо topMargin и т. Д. - без разницы
Не могли бы вы посоветовать мне, что не так с этим кодом, и каково общее эмпирическое правило при использовании SnapKit в программно созданных ячейках, которые должны автоматически изменять его высоту на основе ограничения?
Заранее спасибо
EDIT
UITableView
Методы источника данных
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
}
}