Установить динамическую высоту UIImageView внутри UITableViewCell в соответствии с высотой ячейки - PullRequest
0 голосов
/ 28 января 2020

У меня проблема с UITableViewCell, который имеет UIImageView и UILabel. Все ограничения устанавливаются программно, так что ограничения настраиваются так, чтобы высота ячейки динамически изменялась с высотой UILabel плюс определенный отступ, в то время как UIImageView должен адаптироваться к высоте UITableViewCell. Однако, когда я размещаю изображение, высота ячейки увеличивается, пока она не станет таковой для изображения.

    contentView.addSubview(coverView)
    contentView.addSubview(indexUnitLabel)

    NSLayoutConstraint.activate([
        coverView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor),
        coverView.topAnchor.constraint(equalTo: contentView.topAnchor),
        coverView.bottomAnchor.constraint(equalTo: contentView.leadingAnchor),
        coverView.widthAnchor.constraint(equalToConstant: 68),

        titleLabel.topAnchor.constraint(equalTo: contentView.topAnchor, constant: padding),
        titleLabel.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -padding),
        titleLabel.leadingAnchor.constraint(equalTo: coverView.trailingAnchor, constant: padding),
        titleLabel.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -padding)
    ])

Есть ли способ установить ограничения, чтобы высота UIImageView адаптировалась к высоте клетки динамически?

Ответы [ 2 ]

1 голос
/ 28 января 2020

Я предполагаю, что вы повторно набрали свой код (вместо вставки фактического кода), так как у вас есть coverView. bottomAnchor , равный contentView. leadAnchor , а также добавление indexUnitLabel как подпредставление, но затем пытается ограничить titleLabel ...

Итак, ваши ограничения должны выглядеть следующим образом:

    NSLayoutConstraint.activate([
        coverView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor),
        coverView.topAnchor.constraint(equalTo: contentView.topAnchor),
        coverView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor),
        coverView.widthAnchor.constraint(equalToConstant: 68),

        indexUnitLabel.topAnchor.constraint(equalTo: contentView.topAnchor, constant: padding),
        indexUnitLabel.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -padding),
        indexUnitLabel.leadingAnchor.constraint(equalTo: coverView.trailingAnchor, constant: padding),
        indexUnitLabel.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -padding)
    ])

НО .. . , который не дает авторазметке достаточно информации о том, что вы хотите сделать с высотой ячейки.

Вы говорите, что хотите высота надписи (плюс padding), чтобы определить высоту ячейки, поэтому добавьте эту строку:

indexUnitLabel.setContentHuggingPriority(.required, for: .vertical)

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

0 голосов
/ 28 января 2020

Вместо того, чтобы устанавливать ограничения на coverView от contentView, укажите от coverView до titleLabel. Отрегулируйте отступы соответственно. Также установите для translatesAutoresizingMaskIntoConstraints значение false.

  titleLabel.translatesAutoresizingMaskIntoConstraints = false
  coverView.translatesAutoresizingMaskIntoConstraints = false

  titleLabel.topAnchor.constraint(equalTo: contentView.topAnchor, constant: padding),
  titleLabel.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -padding),
  titleLabel.leadingAnchor.constraint(equalTo: coverView.trailingAnchor, constant: padding),
  titleLabel.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -padding)

  coverView.topAnchor.constraint(equalTo: titleLabel.topAnchor, constant: padding),
  coverView.bottomAnchor.constraint(equalTo: titleLabel.bottomAnchor, constant: -padding),
  coverView.leadingAnchor.constraint(equalTo: titleLabel.trailingAnchor, constant: padding),
  coverView.trailingAnchor.constraint(equalTo: titleLabel.trailingAnchor, constant: -padding)
...