Программно используя ограничения в подпредставлении UITableViewCell - PullRequest
0 голосов
/ 13 октября 2018

Я пытаюсь поэкспериментировать с ограничениями в Swift Playground и схожу с ума.У меня есть маленький class CLListTableViewCell: UITableViewCell с UILabel в нем:

let nameLabel: UILabel = {
    let label = UILabel()
    label.text = "Here is a great text"
    label.translatesAutoresizingMaskIntoConstraints = false
    label.textAlignment = .left // text alignment in center
    return label
}()

У меня есть функция для настройки макета, которую я вызываю в конце init:

func addSubViewsAndLayout() {
    contentView.addSubview(nameLabel)

    let views = ["nameLabel": nameLabel]
    let horizontalConstraintsStringRepresentation = "H:|-[nameLabel]-|"

    let horizontalConstraints = NSLayoutConstraint.constraints(withVisualFormat: horizontalConstraintsStringRepresentation, options: .alignAllCenterY, metrics: nil, views: views)

    let verticalConstraintsStringRepresentation = "V:|-[nameLabel]-|"
    let verticalNameConstraints = NSLayoutConstraint.constraints(withVisualFormat: verticalConstraintsStringRepresentation, options: .alignAllLeading, metrics: nil, views: views)
    NSLayoutConstraint.activate(horizontalConstraints)
    NSLayoutConstraint.activate(verticalNameConstraints)
}

    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
    super.init(style: style, reuseIdentifier: reuseIdentifier)
    addSubViewsAndLayout()
}

Все, что я получаю, это красивая белая пустая клетка.Кто-нибудь может указать на то, что я здесь делаю неправильно?Любое недостающее ограничение?В консоли Playground нет индикации.

--- EDIT ---

Проблема, похоже, исходит от tableView, в котором я отображаю ячейку.Вот код:

class TableViewController : UITableViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 2
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as? CLListTableViewCell ?? CLListTableViewCell(style: .default, reuseIdentifier: "cell")
        return cell
    }

    override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
        return "Section \(section)"
    }
}

--- EDIT 2 ---

Вот снимок экрана с результатом .

1 Ответ

0 голосов
/ 13 октября 2018

Благодаря Hardik Parmar (большое спасибо!) Проблема заключалась в том, что игровая площадка представляла UITableViewController, а не UITableViewCell.

После небольшого чтения я добавил следующее перед PlaygroundPage.current.liveView = myTableViewController:

tableViewController.tableView.beginUpdates()
tableViewController.tableView.endUpdates()

Это заставляет tableView перерисовывать ячейки.И теперь я могу видеть мой tableView правильно.Я думаю, было бы неплохо, если бы Playground сделал это сам по себе, но, похоже, необходимо усилить это поведение.Я надеюсь, что это может помочь другим!

...