• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - Collection View 流布局类似于 Apple Store 应用程序

[复制链接]
菜鸟教程小白 发表于 2022-12-12 18:55:22 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在使用 UICollectionView 来显示图像,就像在 Apple Store iPhone Application 中一样。 (附截图)

但我无法设置类似于 Apple 商店应用的流程布局。我在设置它的布局和内容 offset 和 inset 时遇到问题。我尝试了每一件事,甚至将它的流布局子类化。即使那样对我也不起作用。

- (CGPoint)targetContentOffsetForProposedContentOffsetCGPoint)proposedContentOffset withScrollingVelocityCGPoint)velocity

- (NSArray *)layoutAttributesForElementsInRectCGRect)rect

我也尝试实现 iCarousel ,但效果不佳。

感谢任何与流布局相关的帮助。另外,如果除了使用 Collection View 之外还有其他解决方案。

enter image description here

enter image description here

enter image description here

更新:

我已经实现了以下代码来使用 NDCollectionViewFlowLayout 设置它的流布局:

NDCollectionViewFlowLayout *nda = [[NDCollectionViewFlowLayout alloc] init];
nda.itemSize = CGSizeMake(251, 443);
nda.sectionInset = UIEdgeInsetsMake(0.0, 0.0, 0.0, 0.0);
nda.minimumLineSpacing = 15.0;
nda.minimumInteritemSpacing = 10.0;
nda.scrollDirection = UICollectionViewScrollDirectionHorizontal;

一切都像 Appstore 图像布局。

更新:

我最终使用了iCarousel,并在其中做了一些修改。



Best Answer-推荐答案


Example project here

在类属性中

     var itemSize = CGSize(width: 0, height: 0)
     @IBOutlet weak var collectionViewHeight: NSLayoutConstraint!
     @IBOutlet weak var collectionView: UICollectionView!
     fileprivate let sectionInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)

在 viewDidLoad 或 awakeFormNib 中(如果在 collectionViewCell 或 tableViewCell 中)

    if let layout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout {
        layout.minimumLineSpacing = 0
        layout.minimumInteritemSpacing = 0
    }
    collectionView.contentInset = UIEdgeInsets(top: 0, left: 16, bottom: 0, right: 8)
    collectionView.isPagingEnabled = false
    layoutIfNeeded()

    let width = collectionView.bounds.size.width-24
    let height = width * (3/4)
    itemSize = CGSize(width: width, height: height)
    layoutIfNeeded()

实现 UICollectionViewDelegateFlowLayout

    func collectionView(_ collectionView: UICollectionView,
                    layout collectionViewLayout: UICollectionViewLayout,
                    insetForSectionAt section: Int) -> UIEdgeInsets {

        return sectionInsets
    }

    func collectionView(_ collectionView: UICollectionView,
                    layout collectionViewLayout: UICollectionViewLayout,
                    sizeForItemAt indexPath: IndexPath) -> CGSize {
        return itemSize
    }

实现 ScrollViewDelegate

func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
    let pageWidth = itemSize.width
    targetContentOffset.pointee = scrollView.contentOffset
    var factor: CGFloat = 0.5
    if velocity.x < 0 {
        factor = -factor
        print("right")
    } else {
        print("left")
    }

    let a:CGFloat = scrollView.contentOffset.x/pageWidth
    var index = Int( round(a+factor) )
    if index < 0 {
        index = 0
    }
    if index > collectionViewDataList.count-1 {
        index = collectionViewDataList.count-1
    }
    let indexPath = IndexPath(row: index, section: 0)
    collectionView?.scrollToItem(at: indexPath, at: .left, animated: true)
}

在过去的游乐设施部分查看我的项目的示例屏幕截图 我在collectionViewCell中实现了uicollectionview

enter image description here

关于ios - Collection View 流布局类似于 Apple Store 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21797879/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap