Два ограничения меток в одном и том же UITableViewCell - PullRequest
0 голосов
/ 09 мая 2019

Я хочу добавить две метки в каждую ячейку: левая метка в качестве описания, а правая метка - это категория, и я использую библиотеку SnapKit для целей автоматической компоновки.

Проблема в том, что мне нужноустановите ограничение для описания не выше правой метки, если описание длинное, пока я устанавливаю description.numberOfLines = 0, но оно не работает.

let descriptionLabel = UILabel()
        descriptionLabel.textColor = .black
        descriptionLabel.numberOfLines = 0

        let categoryLabel = UILabel()
        categoryLabel.textColor = .darkGray

        descriptionLabel.snp.makeConstraints {
            $0.left.equalToSuperview().offset(5)
            $0.top.equalToSuperview().offset(5)
            $0.right.equalTo(categoryLabel.snp.left).offset(-15).priority(.high)
            $0.bottom.equalToSuperview().offset(-2)
        }

        categoryLabel.snp.makeConstraints {
            $0.right.equalToSuperview().offset(-5)
            $0.top.equalToSuperview().offset(5)
        }

Ожидаемый результат, метка описания не будетПодберите правильный ярлык категории, но реальный результат не такой.

Ответы [ 2 ]

1 голос
/ 10 мая 2019

Это должно исправить ваш макет.См.

// 1: 2: 3: 

комментарии в коде ниже:

class TestCell: UITableViewCell {
    static let identifier: String = "test_cell_identifier"

    var descriptionLabel: UILabel!
    var categoryLabel: UILabel!

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

    func configure() {
        descriptionLabel = UILabel()
        categoryLabel = UILabel()
        descriptionLabel.backgroundColor = .cyan
        categoryLabel.backgroundColor = .yellow

        descriptionLabel.numberOfLines = 0

        contentView.addSubview(descriptionLabel)
        contentView.addSubview(categoryLabel)

        descriptionLabel.snp.makeConstraints {
            $0.left.equalToSuperview().offset(5)
            $0.top.equalToSuperview().offset(5)
            // 1: default priority is .required
            $0.right.equalTo(self.categoryLabel.snp.left).offset(-15)
            $0.bottom.equalToSuperview().offset(-2)
        }

        categoryLabel.snp.makeConstraints {
            $0.right.equalToSuperview().offset(-5)
            $0.top.equalToSuperview().offset(5)
        }

        // 2: prevent category label from being compressed
        categoryLabel.setContentCompressionResistancePriority(.required, for: .horizontal)

        // 3: prevent category label from stretching if description label is really short
        categoryLabel.setContentHuggingPriority(.required, for: .horizontal)

    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

Результат:

enter image description here

0 голосов
/ 09 мая 2019

Высокий приоритет означает, что он будет поврежден, если текст метки описания длинный

1- Сделать это

$0.right.equalTo(categoryLabel.snp.left).offset(-15) 

2- Установите горизонтальный contentCompressionResistance из categoryLabel в 1000

...