Нужно ли устанавливать translatesAutoresizingMaskIntoConstraints = false, если я изменяю размер ячейки раскадровки в коде? Если так, то где? - PullRequest
0 голосов
/ 27 апреля 2020

Я работаю над игрой для iPad, которая использует сетку 6 x 6 одинаковых размеров ячеек, используя UICollectionView для размещения и заполнения ячеек. У меня работает макет, но я получаю ошибку Unable to simultaneously satisfy constraints ... If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints во всех ячейках.

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

(Чтобы заставить работать макет и чтобы был пересчитан размер Признанный, мне нужно было установить предполагаемый размер ячейки collectionView равным 0. Automati c или любое значение приводит к тому, что вместо расчитанного размера используется размер ячейки раскадровки.)

Я читал во многих местах необходимо установить translatesAutoresizingMaskIntoConstraints = false, если представление создается в коде. Здесь вид из раскадровки, но я вычисляю его размер в коде. Значит ли это, что мне нужно установить значение false? Где в коде я бы это сделал? В пользовательском классе для ячейки?

Или решение этой ошибки является чем-то другим?

Спасибо.

1 Ответ

0 голосов
/ 27 апреля 2020

Ответы на мои вопросы:

  1. Нужно ли устанавливать translatesAutoresizingMaskIntoConstraits = false? Да.
  2. Где мне это сделать? В коде для пользовательского CollectionViewCell.

Вот что я сделал.

  1. Удалите ячейку прототипа из раскадровки и сделайте все в коде.

  2. Настройте пользовательскую ячейку примерно так:

class WWCollectionViewCell: UICollectionViewCell {

    override init(frame: CGRect) {
        super.init(frame: frame)
        translatesAutoresizingMaskIntoConstraints = false
    }

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

}
В ViewController, который управляет ContainerView, зарегистрируйте ячейку в viewDidLoad ()
boardCollectionView.register(WWCollectionViewCell.self, forCellWithReuseIdentifier: reuseIdentifier)

Теперь мои ячейки изменяют размер для разных устройств и всегда имеют сетку 6x6 с размерами ячеек, основанными на вычислениях сделано в ViewController.

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