如何使tableview捕捉到单元格中心? (使用gif动画插图)

时间:2016-07-28 08:15:26

标签: ios swift uitableview gallery

我想要实现的是一个图库,它可以包含多达300个图像,使用UIScrollView将导致非优化的ram / cpu使用率,因为它没有汇集(如果我没有我错了),并且它有宽度限制,我无法将其宽度设置为屏幕宽度的300倍(如果我错了,请再次纠正我。)

所以正确的选择是使用UITableView

1 - 如何使它像在这个gif中一样水平滚动?

2 - 如何使其与细胞中心对齐?

gif

修改

我使用它,它给出了我想要的结果,但它有一个问题,它不能容忍我应该刷到多少移动到下一个单元格,我仍然需要帮助..

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)
}

编辑: -

我设法在没有上述代码的情况下完成了这项工作。

2 个答案:

答案 0 :(得分:2)

您应该UICollectionView使用一个单元格或UIPageViewController来实现此类效果。无法水平使用tableview。不知何故,你可以说UICollectionView作为UITableView的横向表示。 UIPageViewcontroller也是很好的解决方案。你应该详细阅读两者,然后决定什么更适合你!

并且是的,使用具有不同大小的单个滚动视图并不好。它可能会造成内存或性能问题!!

更新:

您是否尝试在集合视图的滚动视图中启用分页?

查看下面的截图

enter image description here

选中复选框分页启用!

然后如果您感觉不到平滑效果,那么您应该尝试uncheck adjust scroll view insetsviewcontrollerattribute inspectorview controller选择UICollectionView

检查

的屏幕截图

enter image description here

提出问题的人

编辑: -

添加此功能对我有用,因为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); }