2016-08-16 149 views
2

我遇到了不想水平滚动的UICollectionView问题。我想显示5个单元格,我可以在它们之间滚动。什么是阻止我滚动的collectionviewSwift UICollectionView水平滚动不起作用

import UIKit 

class FeaturedCell: UICollectionViewCell, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout 
{ 
// Attributes 
lazy var featuredVideos = UICollectionView(frame: .zero) 

// Superclass initializer 
required init?(coder aDecoder: NSCoder) 
{ 
    fatalError("init(coder:) has not been implemented") 
} 

// Custom initializer 
required override init(frame: CGRect) 
{ 
    super.init(frame: frame) 

    let layout = UICollectionViewFlowLayout() 
    layout.scrollDirection = .Horizontal 
    featuredVideos = UICollectionView(frame: self.frame, collectionViewLayout: layout) 
    featuredVideos.dataSource = self 
    featuredVideos.delegate = self 

    // Setting the collection view's scrolling behaviour 
    featuredVideos.pagingEnabled = true 
    featuredVideos.scrollEnabled = true 
    featuredVideos.setContentOffset(CGPoint(x: 0,y: 0), animated: true) 

    featuredVideos.registerClass(UICollectionViewCell.self, forCellWithReuseIdentifier: "cellId") 

    addSubview(featuredVideos) 
    setConstraints("H:|[v0(\(frame.width))]|", subviews: featuredVideos) 
    setConstraints("V:|[v0(345)]", subviews: featuredVideos) 
} 

func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
    return 5 
} 

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell 
{ 
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier("cellId", forIndexPath: indexPath) 
    if indexPath.item == 1 { cell.backgroundColor = .lightGrayColor() } else { cell.backgroundColor = .brownColor() } 
    return cell 
} 

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize 
{ 
    return CGSizeMake(frame.width/3, frame.height) 
} 

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAtIndex section: Int) -> CGFloat 
{ 
    return 10 
} 
} 

simulator view

编辑:UICollectionView其实不响应任何的互动,我想 “didSelectAtIndexPath”,不会触发。

+0

你有[启用用户交互]为真? – DeyaEldeen

+0

@DeyaEldeen这是默认的是不是?无论如何,我将它设置为true,但视图仍然不想滚动。 – Sn1perSkkN

+0

请提供图片或更多信息,无论如何,让我们来调试...... 1-你有一个对象是在集合视图上面创建的吗? 2-请更改collectionView的背景颜色以确保它的框架在初始化后不为零,3-为什么类类型是UICollectionViewCell而不是UIViewController,4-是否可以在创建结束时打印集合视图的框架逻辑,跟踪你的问题有点困难。 – DeyaEldeen

回答

0

我发现了这个问题。

在父视图中,我向cellForItemAtIndexPath()中的此视图(这是父视图中的UICollectionViewCell)添加了一个边框,并导致视图仅加载第一个单元并拒绝任何交互。

我通过在“子视图”里面的init()中添加边界来修复它,它工作得很好。

谢谢大家的帮助:)

1

要与UICollectionView实现UICollectionView在UICollectionViewCell尝试这种想法(这两个collectionViews是滚动):

CollectionViewController.swift

import UIKit 

class CollectionViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout 
{ 
var featuredVideos: UICollectionView? 

override func viewDidLoad() { 

    let layout = UICollectionViewFlowLayout() 
    layout.scrollDirection = .Horizontal 
    featuredVideos = UICollectionView(frame: UIScreen.mainScreen().bounds, collectionViewLayout: layout) 

    featuredVideos!.dataSource = self 
    featuredVideos!.delegate = self 

    // Setting the collection view's scrolling behaviour 
    featuredVideos!.pagingEnabled = true 
    featuredVideos!.scrollEnabled = true 
    featuredVideos!.setContentOffset(CGPoint(x: 0,y: 0), animated: true) 

    featuredVideos!.registerClass(CollectionViewCell.self, forCellWithReuseIdentifier: "cellId") 
    view.addSubview(featuredVideos!) 

} 

func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
    return 5 
} 

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell 
{ 
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier("cellId", forIndexPath: indexPath) as! CollectionViewCell 
    cell.initCell() 
    if indexPath.item%2 == 0 
    { 
     cell.backgroundColor = .lightGrayColor() 
    } 
    else 
    { 
     cell.backgroundColor = .brownColor() 
    } 
    return cell 
} 

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize 
{ 
    return CGSizeMake(300, UIScreen.mainScreen().bounds.height) 
} 

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAtIndex section: Int) -> CGFloat 
{ 
    return 10 
} 
} 

CollectionViewCell.swift

class CollectionViewCell: UICollectionViewCell, UICollectionViewDataSource, UICollectionViewDelegate 
{ 
var collectionView: UICollectionView? 

func initCell() { 
    let layout = UICollectionViewFlowLayout() 
    layout.scrollDirection = .Horizontal 
    var collectionViewBounds = self.bounds 
    collectionViewBounds.size.height -= 80 
    collectionViewBounds.origin.y = 40 
    collectionView = UICollectionView(frame: collectionViewBounds, collectionViewLayout: layout) 

    collectionView!.dataSource = self 
    collectionView!.delegate = self 

    // Setting the collection view's scrolling behaviour 
    collectionView!.pagingEnabled = true 
    collectionView!.scrollEnabled = true 
    collectionView!.setContentOffset(CGPoint(x: 0,y: 0), animated: true) 

    collectionView!.registerClass(UICollectionViewCell.self, forCellWithReuseIdentifier: "cellWithCollectionView") 
    addSubview(collectionView!) 

} 

func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
    return 10 
} 

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell 
{ 
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier("cellWithCollectionView", forIndexPath: indexPath) 
    if indexPath.item%2 == 0 
    { 
     cell.backgroundColor = .blueColor() 
    } 
    else 
    { 
     cell.backgroundColor = .whiteColor() 
    } 
    return cell 
} 

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize 
{ 
    return CGSizeMake(100, collectionView.frame.height) 
} 

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAtIndex section: Int) -> CGFloat 
{ 
    return 10 
} 

} 
+0

请评论你已经改变,为什么,谢谢。 – DeyaEldeen

+0

对不起,但我不明白。我应该评论代码中Sn1perSkkN错误的位置?或者,为什么我编辑我的答案? –

+0

@VasilyBodnarchuk实际的类“featuredCell”是一个UICollectionViewCell,我想在它里面添加一个UICollectionView“featuredVideos”。 因此,我首先创建了一个新类,并使用您的代码,我从UICollectionViewCell继承,以使其工作,但它没有。 然后,我取代了我的代码(初始化特色视频...),但它仍然不能解决问题。 “特色视频”拒绝滚动:( – Sn1perSkkN