Swift - множественные изменения пользовательского интерфейса блокируют друг друга - PullRequest
0 голосов
/ 09 мая 2018

Это была настоящая боль в этом вопросе! Я хочу изменить высоту 2-х элементов в случае клавиатуры, но пока один UICollectionView, он просто отказывается это делать!

Если я закомментирую один, другой изменится нормально, но вместе это никогда не сработает!

func textViewDidBeginEditing(_ textView: UITextView) {
    inputContainerView.frame.size.height = 81
    chatCollectionView.frame.size.height = 199
}

Я заметил, что происходит то же самое, каждый раз, когда я хочу обновить фрейм UICollectionView, если используется какой-то другой элемент пользовательского интерфейса и событие клавиатуры. (Я также пробовал, когда вывешивается уведомление UIKeyboardDidShow, но возникает та же проблема)

Я пытался запустить этот блок кода внутри DispatchQueue.main.async, но это не помогло!

Кто-нибудь знает, почему это происходит?

1 Ответ

0 голосов
/ 09 мая 2018

Я рекомендую использовать autolayout, поэтому подключите ограничение высоты для каждого и

self.inputContainerViewHeight.constant = 81

self.chatCollectionViewHeight.constant = 199

self.view.layoutIfNeeded()

Также анимируйте его, если хотите

UIView.animate(withDuration: 0.5 , animations: {

  self.view.layoutIfNeeded()

})
...