ios – 集合中的可重用单元的子视图在滚动后具有错误的大小

ios – 集合中的可重用单元的子视图在滚动后具有错误的大小,第1张

概述我有一个用于聊天页面的collectionView.我创建了一个名为TextChatCollectionViewCell的UICollectionViewCell子类. 我有另一个类填充我的集合视图并为每个项指定一个CGSize(遵循UICollectionViewDelegateFlowLayout和UICollectionViewDataSource协议). 我滚动时单元格框架大小正确但是子视 我有一个用于聊天页面的collectionVIEw.我创建了一个名为TextChatCollectionVIEwCell的UICollectionVIEwCell子类.
我有另一个类填充我的集合视图并为每个项指定一个CGSize(遵循UICollectionVIEwDelegateFlowLayout和UICollectionVIEwDataSource协议).

我滚动时单元格框架大小正确但是子视图的框架大小错误,可能是因为dequeueReusableCell返回另一个单元格的实例并且子视图没有重新加载,我试图调用layoutIfNeeded()来强制再次绘制子视图的布局但是它没有效果.

我的单元格的xib文件有约束:

我填写并返回单元格的代码:

public func collectionVIEw(_ collectionVIEw: UICollectionVIEw,cellForItemAt indexPath: IndexPath) -> UICollectionVIEwCell {    guard let cell = self.manager.collectionVIEw.dequeueReusableCell(withReuseIDentifIEr: "TextChatCollectionVIEwCell",for: indexPath) as? TextChatCollectionVIEwCell else {        return UICollectionVIEwCell()    }    self.fillCellUsingMessageUUID(cell,self.messagesUUIDs[indexPath.row]) // HIDe labelDate (set height to 0 for the moment),fill UITextVIEw etc...    print("=================\(self.messagesUUIDs[indexPath.row])===================")    print("Cell text : " + cell.textMessage.text)    print("Cell frame size : " + cell.frame.size.deBUGDescription)    print("UITextVIEw frame size : " + cell.textMessage.frame.size.deBUGDescription)    print("UITextVIEw parent size : " + cell.textBackgroundVIEw.frame.size.deBUGDescription)    print("Cell content vIEw frame size : " + cell.globalVIEw.frame.size.deBUGDescription)    print("====================================")    return cell}

我的调试输出:

=================B00C74D6-C3F1-4039-948B-0BAC59DC0D83===================Cell text : "Ggg"Cell frame size : (320.0,80.0) // Expected sizeUITextVIEw frame size : (240.0,59.5) // Wrong heightUITextVIEw parent size : (240.0,59.5) // Wrong heightCell content vIEw frame size : (320.0,59.5) // Wrong height=====================================================2704FFF5-17D1-4E0E-9399-DD7EB4C60D36===================Cell text : "Zyehdhzhdhdhzhejajeksvshdjajdjhhhjhhjjhhhhthhytgjuhjjyghjuyghhuygghuutghjutghkiygvcwqazdxcfeerggvbhtyjjnkkuilloomppolpôkkjjîîîukhgkurghhhhhgoohgosohsohdohsohsohshowlhdlhslhslhsglslydlgsotwyod [...]"Cell frame size : (320.0,411.5) // Expected sizeUITextVIEw frame size : (240.0,59.5) // Wrong height

预期产量:

=================B00C74D6-C3F1-4039-948B-0BAC59DC0D83===================Cell text : "Ggg"Cell frame size : (320.0,80.0)UITextVIEw frame size : (240.0,80.0)UITextVIEw parent size : (240.0,80.0)Cell content vIEw frame size : (320.0,80.0)=====================================================2704FFF5-17D1-4E0E-9399-DD7EB4C60D36===================Cell text : "Zyehdhzhdhdhzhejajeksvshdjajdjhhhjhhjjhhhhthhytgjuhjjyghjuyghhuygghuutghjutghkiygvcwqazdxcfeerggvbhtyjjnkkuilloomppolpôkkjjîîîukhgkurghhhhhgoohgosohsohdohsohsohshowlhdlhslhslhsglslydlgsotwyod [...]"Cell frame size : (320.0,411.5) UITextVIEw frame size : (240.0,411.5) UITextVIEw parent size : (240.0,411.5)Cell content vIEw frame size : (320.0,411.5)
解决方法 在为单元格分配新值之前,可能没有更新约束.

这是一个小代码,我希望能解决它.
layoutIfNeeded()

只需在为其分配新值之前在Cell上调用它,例如

cell.layoutIfNeeded()

为我解决了很多问题.希望它能帮到你.

总结

以上是内存溢出为你收集整理的ios – 集合中的可重用单元的子视图在滚动后具有错误的大小全部内容,希望文章能够帮你解决ios – 集合中的可重用单元的子视图在滚动后具有错误的大小所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1002256.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存