Ios Swift-多个UI更改相互阻止

Ios Swift-多个UI更改相互阻止,ios,swift,uicollectionview,keyboard,Ios,Swift,Uicollectionview,Keyboard,在这个问题上真的很痛苦! 我想在键盘事件中更改两个元素的高度,但只要其中一个是UICollectionView,它就拒绝这样做 如果我将其中一个注释掉,另一个会正常更改,但是一起,它永远不会工作 func textViewDidBeginEditing(_ textView: UITextView) { inputContainerView.frame.size.height = 81 chatCollectionView.frame.size.height = 199 } 我

在这个问题上真的很痛苦! 我想在键盘事件中更改两个元素的高度,但只要其中一个是
UICollectionView
,它就拒绝这样做

如果我将其中一个注释掉,另一个会正常更改,但是一起,它永远不会工作

func textViewDidBeginEditing(_ textView: UITextView) {
    inputContainerView.frame.size.height = 81
    chatCollectionView.frame.size.height = 199
}
我观察到,每次我想更新
UICollectionView
的框架时,只要涉及到其他人的UI元素和键盘事件,都会发生同样的事情。(我在发布
UIKeyboardDidShow
通知时也尝试过,但同样的问题也发生了)

我曾尝试在
DispatchQueue.main.async
中运行该代码块,但没有任何帮助


有人知道为什么会发生这种情况吗?

我建议使用autolayout,因此为每一个设置高度约束并

self.inputContainerViewHeight.constant = 81

self.chatCollectionViewHeight.constant = 199

self.view.layoutIfNeeded()
如果需要,也可以设置动画

UIView.animate(withDuration: 0.5 , animations: {

  self.view.layoutIfNeeded()

})

使用自动布局,而不是直接设置框架。如果正在使用外部键盘怎么办?如果没有屏幕键盘,你还想改变尺寸吗?@Paulw11不幸的是,我没有机会坐下来学习自动布局!由于我现在没有时间做,我还能做什么?您可以尝试在
UIView
动画块中更改帧(无论如何,您都应该为更改设置动画,因为这样可以提供更好的用户体验)。您描述的症状听起来像是在使用自动布局,因为更改对象的帧将触发自动布局并影响其他项目的帧。您是如何创建UI的?是通过编程还是通过故事板?根据答案和我之前的评论;使用autolayout尝试使UI在多个设备上正常工作所花费的时间比设置约束所花费的时间要多。您还应该在键盘通知中执行动画,这样你就可以在键盘外观旁边设置更改的动画不幸的是,我没有机会坐下来学习自动布局!既然我现在没有时间做,我还能做什么?@SotirisKaniras Learn Autolayout,它是6年前发布的。强烈建议不要在没有自动布局的情况下构建应用程序,并且只有在最具体的用例中,平台专家才能调整视图框架。