SnapKit и Dynamic UITableViewCell неправильно выложены - PullRequest
0 голосов
/ 12 октября 2018

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

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

Затем я центрирую его по 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 просто обрезает все изображение.

enter image description here

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

1 Ответ

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

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

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

на

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

плюс в viewDidLoad

tableView.estimatedRowHeight = 120 
tableView.rowHeight = UITableViewAutomaticDimension

abdне применять heightForRowAt

...