Tag: uicollectionview

如何设置单元格间距和UICollectionView – UICollectionViewFlowLayout大小比例?

我试图添加UICollectionView到ViewController ,我需要有3个单元'每行'没有空格之间的单元格(它应该看起来像一个网格)。 单元格宽度应该是屏幕大小的三分之一,所以我认为layout.item宽度应该是相同的。 但是,我得到这个: 如果我缩小了这个尺寸(例如7或8像素 ),那就更好了,但是第三个单元格不是完全可见的,我仍然有这个空白区域(顶部和底部,以及左侧和右侧)。 class ViewController: UIViewController, UICollectionViewDelegateFlowLayout, UICollectionViewDataSource { var collectionView: UICollectionView? var screenSize: CGRect! var screenWidth: CGFloat! var screenHeight: CGFloat! override func viewDidLoad() { super.viewDidLoad() screenSize = UIScreen.mainScreen().bounds screenWidth = screenSize.width screenHeight = screenSize.height // Do any additional setup after loading the view, typically from a nib let layout: UICollectionViewFlowLayout = […]

使用自动布局在UICollectionView中指定单元的一个维度

在iOS 8中, UICollectionViewFlowLayout支持根据自己的内容大小自动调整单元格大小。 这根据其内容根据宽度和高度来调整单元格大小。 是否可以为所有单元格的宽度(或高度)指定一个固定的值,并允许其他维度resize? 对于一个简单的例子,考虑一个单元格中的多行标签,将其约束放置在单元格的边上。 多行标签可以调整不同的方式来适应文本。 单元格应填充集合视图的宽度并相应地调整其高度。 相反,单元格的大小是随意的,当单元格大小大于收集视图的不可滚动维度时,它甚至会导致崩溃。 iOS 8引入了方法systemLayoutSizeFittingSize: withHorizontalFittingPriority: verticalFittingPriority:对于集合视图中的每个单元,布局在单元上调用此方法,传入估计的大小。 对我来说有意义的是在单元格上覆盖这个方法,传递给定的大小,并将水平约束设置为所需的水平约束,将垂直约束设置为低优先级。 这样水平尺寸固定在布局中设置的值,垂直尺寸可以灵活。 像这样的东西: – (UICollectionViewLayoutAttributes *)preferredLayoutAttributesFittingAttributes:(UICollectionViewLayoutAttributes *)layoutAttributes { UICollectionViewLayoutAttributes *attributes = [super preferredLayoutAttributesFittingAttributes:layoutAttributes]; attributes.size = [self systemLayoutSizeFittingSize:layoutAttributes.size withHorizontalFittingPriority:UILayoutPriorityRequired verticalFittingPriority:UILayoutPriorityFittingSizeLevel]; return attributes; } 然而,这种方法给出的大小是完全奇怪的。 关于这个方法的文档对我来说是非常不清楚的,并且提到使用常量UILayoutFittingCompressedSize UILayoutFittingExpandedSize ,它只是代表零大小和相当大的一个。 这个方法的size参数真的只是一个传递两个常量的方法吗? 有没有办法达到我期望得到给定大小的适当高度的行为? 备用解决scheme 1)添加将为单元格指定特定宽度的约束条件可以实现正确的布局。 这是一个糟糕的解决scheme,因为该约束应设置为单元格的集合视图的大小,它没有安全的引用。 这个约束的值可以在单元configuration的时候传入,但是这看起来完全违反直觉。 这也很尴尬,因为直接给单元格添加约束或者它的内容视图导致了很多问题。 2)使用表格视图。 表格视图以这种方式工作,因为单元格具有固定的宽度,但是这不能适应其他情况,例如具有固定宽度单元格的iPad布局。

UICollectionView reloadData在iOS 7中无法正常工作

我一直在更新我的应用程序,以在大多数情况下顺利运行的iOS 7上运行。 我已经注意到,在多个应用程序中, UICollectionViewController的reloadData方法的UICollectionViewController不像以前那样。 我将加载UICollectionViewController ,用一些正常的数据填充UICollectionView 。 这在第一次很好。 但是,如果我请求新的数据(填充UICollectionViewDataSource ),然后调用reloadData ,它将查询numberOfItemsInSection和numberOfSectionsInCollectionView的数据源,但它似乎并没有调用cellForItemAtIndexPath正确的次数。 如果我更改代码只重新加载一个部分,那么它将正常工作。 这对我来说是没有问题的,但我不认为我应该这样做。 reloadData应该根据文档重新加载所有可见的单元格。 有没有人看过这个?

更改不同设备方向上的UICollectionViewCell大小

我正在使用UICollectionView与UICollectionViewFlowLayout 。 我通过设置每个单元格的大小 collectionView:layout:sizeForItemAtIndexPath: 从纵向切换到横向时,我想调整每个单元格的大小以完全适合CollectionView的大小,而不在单元格之间留下填充空间。 问题: 1)如何改变旋转事件后的单元格大小? 2)甚至更好,如何使单元格始终适合屏幕的整个大小的布局?

UICollectionView具有自动布局的自定义单元格

我正在尝试自动调整UICollectionViewCells与自动布局的工作,但我似乎无法让单元格的大小自己的内容。 我很难理解单元格的大小是如何从单元格内容的内容更新的。 这是我试过的设置: 在contentView中使用UITextView自定义UICollectionViewCell。 滚动的UITextView被禁用。 contentView的水平约束是:“H:| [_textView(320)]”,即UITextView固定在单元格的左侧,宽度为320。 contentView的垂直约束是:“V:| -0 – [_ textView]”,即UITextView固定在单元格的顶部。 UITextView有一个高度约束设置为一个常量,UITextView报告将适合文本。 以下是将单元格背景设置为红色并将UITextView背景设置为蓝色的样子: 我把这个项目放在GitHub上。

UICollectionView上的UIRefreshControl只在集合填充容器的高度时起作用

我试图添加一个UIRefreshControl到UICollectionView ,但问题是刷新控件不会出现,除非集合视图填满其父容器的高度。 换句话说,除非收集视图足够长以至于需要滚动,否则不能被拉下以显示刷新控制视图。 只要收集超过其父容器的高度,它将被拉下并显示刷新视图。 我已经build立了一个快速的iOS项目,在主视图中只有一个UICollectionView ,带有一个集合视图的出口,这样我就可以在viewDidLoad添加UIRefreshControl 。 还有一个重用标识符cCell的原型单元格 这是控制器中的所有代码,它很好地说明了这个问题。 在这段代码中,我将单元格的高度设置为100,这不足以填充显示,因此无法拉取视图,刷新控件也不会显示。 将其设置为更高的值以填充显示,然后运行。 有任何想法吗? @interface ViewController () <UICollectionViewDelegateFlowLayout, UICollectionViewDataSource> @property (strong, nonatomic) IBOutlet UICollectionView *collectionView; @end @implementation ViewController – (void)viewDidLoad { [super viewDidLoad]; UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init]; [self.collectionView addSubview:refreshControl]; } -(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView { return 1; } -(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { return 1; } -(UICollectionViewCell *)collectionView:(UICollectionView […]

UICollectionView间距边距

我有一个显示照片的UICollectionView 。 我已经使用UICollectionViewFlowLayout创build了collectionview。 它运作良好,但我想间隔边缘。 是否有可能做到这一点使用UICollectionViewFlowLayout或必须实现我自己的UICollectionViewLayout ?

UICollectionView的单元格消失

发生了什么 目前我有一个应用程序在UITableView中使用两个UICollectionViews 。 这样我创build一个像应用程序的脉冲新闻看起来。 我的问题是有时候第六和第十一行会完全消失,留下应该是单元格的空白处。 我真的不介意,如果所有的细胞都是这样的(这样我可以假设我没有正确地做事),但事情是,正在发生那些具体的事情。 我的理论 第6行和第11行是我开始滚动时出现的行,所以默认情况下我能看到5个单元格,当我做第一个水平滚动时,第六个出现(有时为空白)。 我拥有的 我现在唯一做的是这样的: [self.collectionView registerNib:[UINib nibWithNibName:CELL_NIB_NAME bundle:nil] forCellWithReuseIdentifier:CELL_IDENTIFIER]; 在viewDidLoad 。 而在细胞的创造上: – (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { MyCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:CELL_IDENTIFIER forIndexPath:indexPath]; NSMutableDictionary *dictionary = [self.DataSource objectAtIndex:[indexPath row]]; [cell buildViewWithDictionary:dictionary withReferenceParent:self.referenceViewController]; return cell; } 所以在我的低估在这里没有什么奇特的。 我虽然在数据源(一个虚拟的JSON文件)有错误,但有时它工作正常,单元格显示,所以我想从那个部分是好的。 所以我的“问题”:有谁知道发生了什么事? 我真的不想说这是从iOS的错误,但我想不出别的。 编辑1.0 令人惊叹的是这种方法 -(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath; 正在从indexPath […]

UICollectionView – dynamic细胞高度?

我需要显示一堆具有不同高度的collectionViewCells。 意见太复杂,我不想手动计算预期的高度。 我想执行自动布局来计算单元格高度 调用cellForItemAtIndexPath之外的cellForItemAtIndexPath会破坏collectionView并导致崩溃 另一个问题是单元格不在单独的xib中,所以我不能手动实例化一个临时的单元格并将其用于高度计算。 任何解决scheme? public func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize { var cell = collectionView.dequeueReusableCellWithReuseIdentifier(cellIdentifier, forIndexPath: indexPath) as UICollectionViewCell configureCell(cell, item: items[indexPath.row]) cell.contentView.setNeedsLayout() cell.contentView.layoutIfNeeded() return cell.contentView.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize) } 编辑: 一旦调用dequeueReusableCellWithReuseIdentifier,就会发生崩溃。 如果我不调用这种方法,而是返回一个大小,一切都很好,单元格显示没有计算的大小 stream布局中不支持负值或零大小 2015-01-26 18:24:34.231 [13383:9752256] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index […]

UICollectionViewCell中的自动布局不起作用

我有一个简单的UICollectionView与具有单个UITextView的单元格。 UITextView被限制在单元格的边缘,所以它们应该保持与单元格大小相同的大小。 我遇到的问题是,由于某些原因,当我通过collectionView:layout:sizeForItemAtIndexPath:指定单元格大小时,这些约束不起作用。 我在Storyboard中将单元格大小设置为320×50。 如果我用sizeForItemAtIndexPath:返回大小为单元大小的2倍的大小,UITextView保持相同的高度,尽pipe我设置了约束。 我正在使用Xcode 6 GM。 我的视图控制器代码是: @implementation TestViewController – (void)viewDidLoad { [super viewDidLoad]; self.collectionView.delegate = self; self.collectionView.dataSource = self; } – (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; UICollectionViewCell *c = [self.collectionView cellForItemAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:0]]; NSLog(@"%f", c.frame.size.height); UITextView *tv = (UITextView *)[c viewWithTag:9]; NSLog(@"%f", tv.frame.size.height); } – (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { return 1; } – […]