Автовыбор в UITableViewCell contentView - PullRequest
0 голосов
/ 25 июня 2018

Я пытаюсь программно создать ограничения для центрирования этого розового UIView в UITableViewCell.Однако, когда я добавляю ограничения, они не применяются, и я получаю сообщение в консоли, в котором говорится, что некоторые NSAutoresizingMaskLayoutConstraints не могут быть одновременно удовлетворены.

Поэтому, когда я устанавливаю cell.contentView.translatesAutoresizingMaskIntoConstraints = false, я получаю следующее сообщение в консоли:

"Изменение свойства translatesAutoresizingMaskIntoConstraints для contentView UITableViewCell не поддерживается и приведет к неопределенномуповедение, так как это свойство управляется владельцем UITableViewCell ".

Представление центрируется, но консоль говорит, что мне не следует изменять это свойство.

Как этого добиться?

Перед настройкойсвойство false

После установки свойства false

Большое спасибо.

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

UITableViewCell и UICollectionViewCell управляют своими contentView вручную.Другими словами, UIKit полагается на то, что contentView ячеек имеет значение translatesAutoresizingMaskIntoConstraints равное True, поэтому изменение свойства translatesAutoresizingMaskIntoConstraints для contentView объекта UITableViewCell не поддерживается и приведет к неопределенному поведению.

Не делайте этого:

cell.contentView.translatesAutoresizingMaskIntoConstraints = false

Итак, вот полная функция для добавления UIView в UITableViewCell должна выглядеть следующим образом:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)

    //if already added the subview?
    if cell.contentView.subviews.count == 0 {

        let view = UIView() //your pinkView

        view.translatesAutoresizingMaskIntoConstraints = false
        view.backgroundColor = UIColor.purple

        cell.contentView.addSubview(view)

        view.centerXAnchor.constraint(equalTo: cell.contentView.centerXAnchor).isActive = true
        view.centerYAnchor.constraint(equalTo: cell.contentView.centerYAnchor).isActive = true
        view.widthAnchor.constraint(equalToConstant: 50.0).isActive = true
        view.heightAnchor.constraint(equalToConstant: 50.0).isActive = true
    }

    return cell
}
0 голосов
/ 25 июня 2018

Вам не нужно устанавливать translatesAutoresizingMaskIntoConstraints = false в contentView ячейки табличного представления.

Вам нужно только установить translatesAutoresizingMaskIntoConstraints = false для представления, которое добавляется динамически и для IBOutlets translatesAutoresizingMaskIntoConstraints = falseпо умолчанию.

...