gpt4 book ai didi

swift - TableView 单元格 : Constraint change conflicts tableView. endUpdates()

转载 作者:行者123 更新时间:2023-11-28 07:33:42 25 4
gpt4 key购买 nike

我有一个用 Swift 编写的消息传递应用程序。


它确实有消息气泡:如果消息超过 200 个字符,它正在被缩短。

只要用户点击一条消息,它就会被选中:

  • 如果消息被缩短,我用原来的长文本替换文本:因此我需要调用 tableView.beginUpdates()tableView.endUpdates()
  • 另外,我必须使用 UIView.animate()
  • 更改时间标签的高度限制

但这两者似乎相互冲突,并制作了一个奇怪的动画:(看最后)

https://youtu.be/QLGtUg1AmFw

代码:

func selectWorldMessage(indexPath: IndexPath) {

if let cell = tableView.cellForRow(at: indexPath) as? WorldMessageCell {

cell.messageLabel.text = data[indexPath.row].originalMessage
self.lastContentOffsetY = self.tableView.contentOffset.y
self.tableView.beginUpdates()
UIView.animate(withDuration: duration) {


cell.timeLabelHeightConstraint.constant = 18

cell.layoutIfNeeded()


}

self.tableView.endUpdates()
self.lastContentOffsetY = nil
cell.layoutIfNeeded()

WorldMessageIdsStore.shared.nearby.saveCellHeight(indexPath: indexPath, height: cell.frame.size.height, expanded : true, depending: indexPath.section == 1 ? true : false )





}
}
@objc func deselectSelectedWorldMessage(){
if (currentSelectedIndexPath == nil){
return
}
let indexPath = currentSelectedIndexPath!

tableView.deselectRow(at: indexPath, animated: false)

if let cell = tableView.cellForRow(at: indexPath) as? WorldMessageCell {

cell.messageLabel.text = data[indexPath.row].shortenedMessage

self.lastContentOffsetY = self.tableView.contentOffset.y
self.tableView.beginUpdates()
UIView.animate(withDuration: duration) {
cell.timeLabelHeightConstraint.constant = 0

cell.layoutIfNeeded()



}

self.tableView.endUpdates()
self.lastContentOffsetY = nil
cell.layoutIfNeeded()


}



currentSelectedIndexPath = nil
}

有没有办法同时对单元格高度变化和约束变化进行动画处理?

我无法在 UIView.animate(){ ... 部分,因为它会导致新出现的行闪烁。

...

更新 1

因此,如果我将 self.tableView.beginUpdates()self.tableView.endUpdates() 放在 UIView.animate(){ .. . },那么动画效果很好。但正如我所提到的,当新行出现时它会导致闪烁。

视频:

https://youtu.be/8Sex3DoESkQ

更新 2 !!

因此,如果我将 UIview.animate 的持续时间设置为 0.3,一切正常。我真的不明白为什么。

最佳答案

这个动画可以是粘性的。

我认为您这里的主要问题是泡沫比它应该收缩的更多。如果你以慢速动画模式运行你的动画(顺便说一下,模拟器有这个选项,对调试非常有用)你会注意到:

Bubble shrink

为了解决这个问题,您可以让您的标签垂直内容抗压缩更高,并且检查标签也有 Hi 优先级的顶部和底部约束,所以它不会被这样切割。

https://medium.com/@abhimuralidharan/ios-content-hugging-and-content-compression-resistance-priorities-476fb5828ef

关于swift - TableView 单元格 : Constraint change conflicts tableView. endUpdates(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53895571/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com