如何像聊天应用程序一样预先添加ASCellNode
好吧,您知道这些著名的聊天应用程序。 微信和Kakao对话。
这些具有共同的特征。
这些预附加消息的内容偏移量接近于零 。
在此之前,我只是自定义了ASBatchFetching,使预附加的提取可以像基本的附加提取一样工作。
让contentSize:CGSize = scrollView.contentSize
让viewLength = bounds.size.height
让contentLength = contentSize.height
//内容较少
如果contentLength <viewLength {
切换scrollDirection {
case .down:返回.prepend
case .up:返回.append
默认值:return .none}
}
让triggerDistance = viewLength * LeadingScreens让剩下的Distance = contentLength — viewLength —偏移量
切换scrollDirection {
case .down:
返回remainingDistance <= triggerDistance吗?
.append:.none
大小写:
返回偏移量<triggerDistance吗? << --- @HERE
.prepend:.none
默认:
返回.none
}
但是,这种逻辑发生在不自然的更新收集项预添加工作以及意外的内容偏移的情况下。
所以,我只是调整预追加的触发器偏移量。
切换scrollDirection {
case .down:
返回remainingDistance <= triggerDistance吗?
.append:.none
大小写:
保护偏移量<= 0.0 else {return .none} << --- @HERE
返回.prepend
默认:
返回.none
}
避免过度使用反应性功能编程(RxSwift和RxCocoa)更新消息内容
VTalk(Vingle Talk)消息包含一些简单的组件,例如媒体,个人资料,消息文本,例如“参与”按钮,用户名,时间戳等。
特别是,媒体应根据最大/最小宽度和高度来计算图像比率。
不幸的是,所有消息组件都由ViewModel上的组件属性观察器更新
因此,在进入显示状态之前,有时layoutAttributesForItem方法会在UICollectionFlowLayout prepare方法上返回意外的属性。
因为,媒体是由ViewModel上的观察者异步更新的。 最后,layoutAttributesForItem不知道消息包含具有基于图像比率的高度值的媒体。
如果发送的消息不需要修改,我建议在这里避免进行反应式编程。 如果您需要更新消息内容,则只需重新加载单元格即可。