我想要实现的是一个图库,它可以包含多达300个图像,使用UIScrollView
将导致非优化的ram / cpu使用率,因为它没有汇集(如果我没有我错了),并且它有宽度限制,我无法将其宽度设置为屏幕宽度的300倍(如果我错了,请再次纠正我。)
所以正确的选择是使用UITableView
1 - 如何使它像在这个gif中一样水平滚动?
2 - 如何使其与细胞中心对齐?
修改
我使用它,它给出了我想要的结果,但它有一个问题,它不能容忍我应该刷到多少移动到下一个单元格,我仍然需要帮助..
func scrollViewDidEndDragging(scrollView: UIScrollView, willDecelerate decelerate: Bool)
{
// Find collectionview cell nearest to the center of collectionView
// Arbitrarily start with the last cell (as a default)
var closestCell : UICollectionViewCell = collectionView.visibleCells()[0];
for cell in collectionView!.visibleCells() as [UICollectionViewCell]
{
let closestCellDelta = abs(closestCell.center.x - collectionView.bounds.size.width/2.0)
let cellDelta = abs(cell.center.x - collectionView.bounds.size.width/2.0)
if (cellDelta < closestCellDelta)
{
closestCell = cell
}
}
let indexPath = collectionView.indexPathForCell(closestCell)
collectionView.scrollToItemAtIndexPath(indexPath!, atScrollPosition: UICollectionViewScrollPosition.CenteredHorizontally, animated: true)
}
func scrollViewWillBeginDecelerating(scrollView: UIScrollView)
{
// Find collectionview cell nearest to the center of collectionView
// Arbitrarily start with the last cell (as a default)
var closestCell : UICollectionViewCell = collectionView.visibleCells()[0];
for cell in collectionView!.visibleCells() as [UICollectionViewCell]
{
let closestCellDelta = abs(closestCell.center.x - collectionView.bounds.size.width/2.0)
let cellDelta = abs(cell.center.x - collectionView.bounds.size.width/2.0)
if (cellDelta < closestCellDelta)
{
closestCell = cell
}
}
let indexPath = collectionView.indexPathForCell(closestCell)
collectionView.scrollToItemAtIndexPath(indexPath!, atScrollPosition: UICollectionViewScrollPosition.CenteredHorizontally, animated: true)
}
编辑: -
我设法在没有上述代码的情况下完成了这项工作。
答案 0 :(得分:2)
您应该UICollectionView使用一个单元格或UIPageViewController来实现此类效果。无法水平使用tableview。不知何故,你可以说UICollectionView
作为UITableView
的横向表示。 UIPageViewcontroller
也是很好的解决方案。你应该详细阅读两者,然后决定什么更适合你!
并且是的,使用具有不同大小的单个滚动视图并不好。它可能会造成内存或性能问题!!
更新:
您是否尝试在集合视图的滚动视图中启用分页?
查看下面的截图
选中复选框分页启用!
然后如果您感觉不到平滑效果,那么您应该尝试uncheck adjust scroll view insets
在viewcontroller
下attribute inspector
下view controller
选择UICollectionView
检查
的屏幕截图 提出问题的人编辑: -
添加此功能对我有用,因为adjust scroll view insets
没有
layout.minimumInteritemSpacing = 0
layout.minimumLineSpacing = 0
选项。
[](std::index_sequence<std::size_t ...I> s) {
};
答案 1 :(得分:0)
您可以使用UICollectionView并配置集合视图单元格
set collectionViewLayout size ...此大小基于上面的视图
- (CGSize)collectionView:(UICollectionView *)collectionView布局:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { 返回CGSizeMake(250,150); }