Swift SnapKit динамическая проблема высоты - PullRequest
0 голосов
/ 20 мая 2019

Я использовал snapKit для DispatchQueue.main.async , чтобы установить ограничения программно. Но я заметил, что main.async иногда вызывает зависание пользовательского интерфейса, и я меняю метод, чтобы использовать его. Теперь у меня есть проблема с использованием динамической высоты, старый метод вызывает ошибку, когда я пытаюсь сделать динамическую высоту зависящей от содержимого ...

СТАРЫЙ МЕТОД (innerView - это подвид представления)

DispatchQueue.main.async {
        view.snp.makeConstraints({ (make) in
            make.top.equalToSuperview().inset(45)
            make.left.right.equalToSuperview().inset(12)
            make.bottom.equalTo(self.innerView.snp.bottom).offset(12)
        })
    }
//After i add it like superView.addSubView(view)
//superView contains view, and view(dynamic height) contains innerView

НОВЫЙ МЕТОД

superView.addSubview(view)
view.snp.makeConstraints({ (make) in
            make.top.equalToSuperview().inset(45)
            make.left.right.equalToSuperview().inset(12)
            make.bottom.equalTo(self.innerView.snp.bottom).offset(12)
        })

enter image description here

Ответы [ 2 ]

0 голосов
/ 24 мая 2019

Я обнаружил проблему, на тот случай, если кому-то это понадобится ... добавьте make.bottom.equalTo (self.innerView.snp.bottom) .offset (12) после того, как вы добавите все ограничения superview, и это сработает!

0 голосов
/ 20 мая 2019

Вы должны добавить оба, прежде чем устанавливать ограничения

superView.addSubview(view)
superView.addSubview(innerView) //  or view.addSubview(innerView) if it's nested UI
view.snp.makeConstraints({ (make) in
     make.top.equalToSuperview().inset(45)
     make.left.right.equalToSuperview().inset(12)
     make.bottom.equalTo(self.innerView.snp.bottom).offset(12)
})
...