SnapKit и Dynamic UITableViewCell неправильно выложены

В настоящее время я создаю многократно используемое представление, которое использует преимущества динамического изменения размера, которое UITableView предлагает со своими ячейками.

Я пытаюсь добиться того, чтобы дать представлению внутри ячейки ширину и высоту в зависимости от размера, который был задан в свойстве size, которое определено в структуре, я пропускаю это с помощью функции configure после установки размер зрения.

Затем я центрирую его на xAxis и применяю любые поля вокруг представления, используя свойство в структуре, которое является просто свойством UIEdgeInset. При использовании библиотеки SnapKit это выглядит следующим образом.

    if  let formImageItem = formImageItem,
        let size = formImageItem.size {

        formItemImgVw = UIImageView(frame: CGRect(x: 0, y: 0, width: size.width, height: size.height))
        formItemImgVw?.image = formImageItem.image
        formItemImgVw?.contentMode = formImageItem.aspectFit

        contentView.addSubview(formItemImgVw!)

        formItemImgVw?.snp.makeConstraints({ (make) in
              make.size.equalTo(CGSize(width: size.width, height: size.height))
              make.top.equalTo(formImageItem.margin.top)
              make.bottom.equalTo(formImageItem.margin.bottom)
              make.centerX.equalToSuperview()
        })
    }

Кажется, у меня проблема в том, что я получаю следующее предупреждение.

2018-10-12 14:57:34.101532+0100 xxxx Dev[6104:2160548] [LayoutConstraints] Unable to simultaneously satisfy constraints.
    Probably at least one of the constraints in the following list is one you don't want. 
    Try this: 
        (1) look at each constraint and try to figure out which you don't expect; 
        (2) find the code that added the unwanted constraint or constraints and fix it. 
(
    "<SnapKit.LayoutConstraint:0x2830ec720@FormImageViewTableViewCell.swift#61 UIImageView:0x10530a940.height == 114.0>",
    "<SnapKit.LayoutConstraint:0x2830ec780@FormImageViewTableViewCell.swift#62 UIImageView:0x10530a940.top == UITableViewCellContentView:0x105503500.top>",
    "<SnapKit.LayoutConstraint:0x2830ec7e0@FormImageViewTableViewCell.swift#63 UIImageView:0x10530a940.bottom == UITableViewCellContentView:0x105503500.bottom>",
    "<NSLayoutConstraint:0x2837e2580 'UIView-Encapsulated-Layout-Height' UITableViewCellContentView:0x105503500.height == 44   (active)>"
)

Will attempt to recover by breaking constraint 
<SnapKit.LayoutConstraint:0x2830ec720@FormImageViewTableViewCell.swift#61 UIImageView:0x10530a940.height == 114.0>

Я понимаю, что это говорит мне в основном, что он выбирает использовать высоту 44, которая установлена ​​по умолчанию для ячейки табличного представления. Но я не могу понять, почему он использует эту высоту по умолчанию, а не ту, которую я определил в своих ограничениях, и применяет высоту к виду, добавляя при этом расстояние сверху и снизу.

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

Итак, в конечном итоге я пытаюсь добиться того, чтобы дать представлению заданную высоту и ширину и использовать значения, чтобы применить верхний и нижний интервалы (поля), чтобы изменить размер ячейки, в которой она находится в данный момент.

1 ответ

Решение

Вам нужно понизить приоритет нижних ограничений, поэтому замените это

make.bottom.equalTo(formImageItem.margin.bottom)

с

make.bottom.equalTo(formImageItem.margin.bottom).priority(999)

плюс в viewDidLoad

tableView.estimatedRowHeight = 120 
tableView.rowHeight = UITableViewAutomaticDimension

Абд не реализовать heightForRowAt

Другие вопросы по тегам