使用Xamarin iOS及XIB在UITableViewCell中根据用户操作左右排列多个UIView
iOS TableView 左右操作动态排列图片实现方案
直接操作UIImageView显隐、修改frame的方案灵活性较差,且动效实现成本高,推荐两种更易落地的实现方式:
方案一:UICollectionView 内嵌方案(推荐,适配大量图片场景)
- 自定义UITableViewCell,内部添加一个横向布局的UICollectionView,使用
UICollectionViewFlowLayout,设置滚动方向为横向,按需求配置item大小、item间距,关闭collectionView自带滑动手势避免和操作手势冲突 - collectionView绑定独立数据源,数组存储当前cell需要展示的图片模型
- 左/右操作触发后调整数据源顺序:左操作将数据源首元素移到末尾,右操作将数据源尾元素移到队首
- 数据源调整完成后调用
performBatchUpdates实现自动过渡动画,无需手动修改控件布局:
// Swift 示例 collectionView.performBatchUpdates { collectionView.reloadSections(IndexSet(integer: 0)) } completion: { _ in // 动画完成后续处理可选 }
// Objective-C 示例 [self.collectionView performBatchUpdates:^{ [self.collectionView reloadSections:[NSIndexSet indexSetWithIndex:0]]; } completion:nil];
- 如需自定义动画时长、曲线,可将上述代码包裹在
UIView.animate块中调整参数即可
方案二:UIStackView 方案(适配图片数量固定的轻量场景)
如果每个cell展示的图片数量固定且不超过5张,可以用横向UIStackView管理所有UIImageView:
- 提前把所有图片控件添加到stackView的
arrangedSubviews数组中,设置好对齐方式、间距 - 左右操作触发后,直接调整
arrangedSubviews的元素顺序,系统会自动生成布局过渡动画,无需手动处理布局逻辑
注意事项
- 所有图片建议提前做好内存缓存,避免切换排列、cell复用的时候出现加载卡顿
- 如果需要自定义滑动动效的偏移量,可以结合
UIPanGestureRecognizer的手势偏移值实时调整控件位置,手势结束后执行最终的排列逻辑
内容的提问来源于stack exchange,提问作者Murugaraj Vengatapathy
相关产品推荐
相关产品推荐

