Программно ограничение не работает внутри UICollectionViewCell Swift - PullRequest
0 голосов
/ 06 февраля 2019

Я попытался сделать программно просмотр внутри UICollectionViewCell, и я думаю, что будет разумно поместить «код программно просмотра» внутри UICollectionViewCell.

Так вот мой код:

override func awakeFromNib() {
        super.awakeFromNib()

        let view = UIView()
        view.frame = CGRect.zero
        view.backgroundColor = UIColor.black

        self.contentView.addSubview(view)
        self.contentView.translatesAutoresizingMaskIntoConstraints = false

        NSLayoutConstraint.activate([
            view.topAnchor.constraint(equalTo: self.contentView.topAnchor, constant: 0),
            view.bottomAnchor.constraint(equalTo: self.contentView.bottomAnchor, constant: 0),
            view.trailingAnchor.constraint(equalTo: self.contentView.trailingAnchor, constant: 25),
            view.leadingAnchor.constraint(equalTo: self.contentView.leadingAnchor, constant: 25),
            ])

        self.contentView.layoutIfNeeded()
    }

Мне было интересно, почему не работает автоматическая разметка, вместо этого, если я использую ручной CGRect, вид действительно появился.

Ответы [ 3 ]

0 голосов
/ 06 февраля 2019

Попробуйте изменить self.contentView.translatesAutoresizingMaskIntoConstraints = false на: view.translatesAutoresizingMaskIntoConstraints = false

Вы хотите отключить translatesAutoresizingMaskIntoConstraints вашего view, поскольку мы хотим применить к нему autolayout.

0 голосов
/ 06 февраля 2019

Первый: Вы не должны вызывать метод layoutIfNeeded, цикл автоматического макета сделает это за вас после изменения правил (ограничений)

Второй: Вы должны установить для свойства translatesAutoresizingMaskIntoConstraints значение false для представления, которое будет размечено, поэтому вам не следует делать это

self.contentView.translatesAutoresizingMaskIntoConstraints = false

, но вы должны сделать это

view.translatesAutoresizingMaskIntoConstraints = false

Это потому, что ограничения маски с автоматическим изменением размера применяются к вашему view с установленными вами ограничениями.Это может и, вероятно, приведет к нарушению ограничений.

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

0 голосов
/ 06 февраля 2019

Это решение необходимо просто установить view.translatesAutoresizingMaskIntoConstraints = false, а не contenView

override func awakeFromNib() {
    super.awakeFromNib()

    let view = UIView()
    view.frame = CGRect.zero
    view.backgroundColor = UIColor.black


    self.contentView.addSubview(view)
    view.translatesAutoresizingMaskIntoConstraints = false
    NSLayoutConstraint.activate([
        view.topAnchor.constraint(equalTo: self.contentView.topAnchor, constant: 0),
        view.bottomAnchor.constraint(equalTo: self.contentView.bottomAnchor, constant: 0),
        view.trailingAnchor.constraint(equalTo: self.contentView.trailingAnchor, constant: 25),
        view.leadingAnchor.constraint(equalTo: self.contentView.leadingAnchor, constant: 25),
        ])
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...