在 UICollectionview iOS 8 中包装单元格

Posted

技术标签:

【中文标题】在 UICollectionview iOS 8 中包装单元格【英文标题】:Wrapping cells in UICollectionview iOS 8 【发布时间】:2015-05-09 02:57:38 【问题描述】:

this question 也有同样的问题。我已经尝试过解决方案,但没有调用。我应该在哪里实现或调用 UICollectionViewFlowLayout 的方法或子类。

我应该在哪里使用它? 提前致谢。

【问题讨论】:

请至少简要解释引用的问题。 【参考方案1】:

你可以像下面这样,这个方法是自动调用的,

快速版本

首先创建一个新类,例如 UICollectionViewFlowLayout 的子类

import UIKit

class CustomLayout: UICollectionViewFlowLayout


override init() 
    super.init()


required init(coder aDecoder: NSCoder) 
    fatalError("init(coder:) has not been implemented")


var newAttributes:[AnyObject] = []
override func layoutAttributesForElementsInRect(rect: CGRect) -> [AnyObject]? 
    super.layoutAttributesForElementsInRect(rect)
    var attributes:[AnyObject] = super.layoutAttributesForElementsInRect(rect)!
    //arrayWithCapacity(attributes.count)
    //configure your attributes for each item hear and store it in separate array and return that array in below example i am sending the same attributes.

    return attributes
   

ViewController 类中

import UIKit

class ViewController: UIViewController,UICollectionViewDelegate,UICollectionViewDataSource 

@IBOutlet weak var aCollectionView: UICollectionView!
override func viewDidLoad() 
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.


    var customLayout:CustomLayout = CustomLayout() //initilise the custom layout for collection view

    customLayout.minimumLineSpacing      = 0.33 //set the offset between items
    customLayout.minimumInteritemSpacing = 0.0
    customLayout.itemSize = CGSizeMake(50.0, 50.0)
    aCollectionView.collectionViewLayout = customLayout //set it to collection view
    var cellNib:UINib = UINib(nibName: "CollectionViewCell", bundle: nil)
    aCollectionView.registerNib(cellNib, forCellWithReuseIdentifier: "CELL")

objective-c 版本

在 xcode 中通过子类化 UICollectionViewFlowLayout 来创建一个新文件,假设它的名称为 MyCustomCollectionViewFlowLayout 并在 MyCustomCollectionViewFlowLayout .m 文件中放置代码

#import "MyCustomCollectionViewFlowLayout.h"

@implementation MyCustomCollectionViewFlowLayout

- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect

   [super layoutAttributesForElementsInRect:rect];
   NSArray *attributes = [super layoutAttributesForElementsInRect:rect];
   NSMutableArray *newAttributes = [NSMutableArray arrayWithCapacity:attributes.count];
  for (UICollectionViewLayoutAttributes *attribute in attributes)
   
      if ((attribute.frame.origin.x + attribute.frame.size.width <= ceil(self.collectionViewContentSize.width)) &&
        (attribute.frame.origin.y + attribute.frame.size.height <= ceil(self.collectionViewContentSize.height)))
      
          [newAttributes addObject:attribute];
      
  
  return newAttributes;


- (void)dealloc

   [super dealloc];


@end

你使用集合视图的类只需导入 MyCustomCollectionViewFlowLayout.h 这个并将其设置为集合视图

- (void)viewDidLoad
 
   [super viewDidLoad];
    //....other codes 

   MyCustomCollectionViewFlowLayout *flowLayout = [[MyCustomCollectionViewFlowLayout alloc]init];

  [flowLayout setScrollDirection:UICollectionViewScrollDirectionHorizontal];
  //set according to your settings
  flowLayout.minimumInteritemSpacing = 0.0f;
  flowLayout.minimumLineSpacing      = 0.33f; //set the offset between items
  _collectionView.pagingEnabled = YES;
  _collectionView.bounces       = NO;
  _collectionView.showsHorizontalScrollIndicator = NO;
  _collectionView.showsVerticalScrollIndicator   = NO;
  [_collectionView setCollectionViewLayout:flowLayout]; //set your custom flow layout hear
  [_collectionView registerClass:[MyCollectionViewCell class] forCellWithReuseIdentifier:cellIdentifier]; //set the custom cell
 

【讨论】:

他迅速要求回答。这对他来说可能只是胡言乱语。 @Deekor 很抱歉造成混乱,当我回答这个问题时,这个问题没有被标记为 swift,我也添加了 swift 版本 没有理由否决这个答案 IMO。他回答了问题并提供了更多信息。

以上是关于在 UICollectionview iOS 8 中包装单元格的主要内容,如果未能解决你的问题,请参考以下文章

在 UICollectionview iOS 8 中包装单元格

带有 UICollectionView 的 iOS 8 小部件(今天的扩展)

在 iOS 8 中重新加载时未调用 UICollectionview cellForItemAtIndexPath

自动布局 UICollectionView iOS 8

iOS 8 Swift UICollectionView reloadData() 导致视图(图像)跳转单元格

iOS 方向 UICollectionView