Метка ячейки UITableView усекается при прокрутке - PullRequest
1 голос
/ 20 марта 2020

У меня есть таблица, в которой отображается созданная пользователем ячейка. Проблема в том, что ярлык в моей ячейке обрезается при каждой прокрутке. Даже если я придаю метке большую ширину, она все равно усекается.

Это мой cellForRowAt:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    guard let cell = tableView.dequeueReusableCell(withIdentifier: cellID, for: indexPath) as? CoronaStatisticsCell else { return UITableViewCell() }

    let currentCountry = searchedCountry == nil ? countrySections[indexPath.section][indexPath.row] : searchedCountry![indexPath.row]
    cell.configure(country: currentCountry)
    cell.preservesSuperviewLayoutMargins = false
    cell.separatorInset = UIEdgeInsets.zero
    cell.layoutMargins = UIEdgeInsets.zero

    return cell
}

Это мой ярлык, который усекается в моей ячейке:

private lazy var casesStaticticLbl: UILabel = {
    var lbl = UILabel()
    lbl.font = UIFont(name: "AvenirNext-Bold", size: 20)
    lbl.textAlignment = .left
    return lbl
}()

В методе setSelected я установил свои представления:

override func setSelected(_ selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

    layer.cornerRadius = 10
    countryLabel.translatesAutoresizingMaskIntoConstraints = false
    addSubview(countryLabel)

    NSLayoutConstraint.activate([
        countryLabel.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 10),
        countryLabel.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -10),
        countryLabel.topAnchor.constraint(equalTo: topAnchor, constant: 10),
        countryLabel.heightAnchor.constraint(equalToConstant: 20)
    ])

    var casesSV = UIStackView(arrangedSubviews: [casesLbl, casesStaticticLbl])
    var deathsSV = UIStackView(arrangedSubviews: [deathLbl, deathStaticticLbl])
    var recoveredSV = UIStackView(arrangedSubviews: [recoveredLbl, recoveredStaticticLbl])

    for sv in [casesSV, deathsSV, recoveredSV] {
        sv.axis = .vertical
        sv.translatesAutoresizingMaskIntoConstraints = false
        sv.spacing = 10
        sv.alignment = .leading
        addSubview(sv)
    }

    NSLayoutConstraint.activate([
        casesSV.leadingAnchor.constraint(equalTo: countryLabel.leadingAnchor),
        casesSV.topAnchor.constraint(equalTo: countryLabel.bottomAnchor, constant: 5),
        casesSV.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -20),

        deathsSV.centerXAnchor.constraint(equalTo: centerXAnchor),
        deathsSV.topAnchor.constraint(equalTo: countryLabel.bottomAnchor, constant: 5),
        deathsSV.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -20),

        recoveredSV.trailingAnchor.constraint(equalTo: trailingAnchor, constant: -30),
        recoveredSV.topAnchor.constraint(equalTo: countryLabel.bottomAnchor, constant: 5),
        recoveredSV.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -20),
    ])
}

Это начальная метка

enter image description here

после прокрутки:

enter image description here

Я думаю, что есть проблема с моими представлениями стека, потому что, если я только добавляю метку в ячейку, ничто не усекается.

Спасибо в авансовый

1 Ответ

2 голосов
/ 20 марта 2020

Я отвечаю на ваш вопрос, основываясь на данных контекстах.

Прежде всего, комментарий Абхишека довольно приятен. Я бы сказал, что вы определенно можете играть с ограничениями в методе setSelected, НО не добавляя подпредставления. Это просто вытекает из моих личных предпочтений.

Единственный раз, когда вы добавляете подпредставления и устанавливаете их ограничения, находится в вашем методе инициализации override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?), но, повторяя, вы определенно можете переключать ограничения в вашем setSelected И также в ваш cellForRow.

Чтобы решить вашу проблему, учитывая текущие контексты в вашем вопросе, вы можете добавить явную ширину в качестве ограничения. Если вы укладываете ярлыки в stackView, вы должны указать хотя бы одно явное ограничение по высоте или ширине.


И наконец, учтите, что Apple (App Store) и Google Play Store не примут ваше приложение о

COVID-19 ?

ЕСЛИ вы не из организации здравоохранения. Это для предотвращения дезинформации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...