Tag: uicollectionview

iOS 10中使用自定义单元格的collectionViewContentSize

在iOS 10之前,我有一个自定义表格视图,它只包含一个使用标准UICollectionViewFlowLayout的自定义单元的UICollectionView。 集合视图单元格的大小使用自动布局。 为了让表格单元格能够正确地resize,我必须find集合视图的内容大小,并在表格单元格的systemLayoutSizeFittingSize:withHorizo​​ntalFittingPriority:verticalFittingPriority:中使用它。 我还发现,调用collectionView.collectionViewLayout.collectionViewContentSize使用estimatedItemSize而不是大小正确的单元格,除非我调用了collectionView layoutIfNeeded。 这导致了systemLayoutSizeFittingSize: – (CGSize) systemLayoutSizeFittingSize:(CGSize)targetSize withHorizontalFittingPriority:(UILayoutPriority)horizontalFittingPriority verticalFittingPriority:(UILayoutPriority)verticalFittingPriority { self.collectionView.frame = CGRectMake(0, 0, targetSize.width, FLT_MAX); [self.collectionView layoutIfNeeded]; CGSize collectionViewContentSize = self.collectionView.collectionViewLayout.collectionViewContentSize; CGFloat verticalPadding = fabs(self.collectionViewTopPaddingConstraint.constant) + fabs(self.collectionViewBottomPaddingConstraint.constant); CGSize cellSize = CGSizeMake(collectionViewContentSize.width, collectionViewContentSize.height + verticalPadding); return cellSize; } 对layoutIfNeeded的调用现在会导致*** Assertion failure in -[_UIFlowLayoutSection computeLayoutInRect:forSection:invalidating:invalidationContext:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3599.6/UIFlowLayoutSupport.m:823 我通过调用systemLayoutSizeFittingSize中的layoutIfNeeded违反了一些道德规则? 有没有更好的方法来计算集合视图的内容大小,当它使用自我大小的单元格? 我宁愿不必从自动布局移动到在代码中进行这些大小的计算,但这当然是最糟糕的情况。

防止在新行开始uicollectionview部分

我在uicollectionview上使用stream布局。 这一切看起来不错,除了似乎开始另一条线上的另一节。 这似乎是一个合理的默认,但我怎么重写这一点,使部分在同一行无缝stream动,就像没有新的部分开始? 谢谢!

如何根据设备屏幕大小调整collections视图单元格?

我注意到单元格会一直遵循大小检查器的定义。 即使我已经应用了UICollectionViewDelegateFlowLayout。 所以这就是它的样子。 但我希望细胞看起来像是如何在一个较小的iphone屏幕上。

UICollectionView不出现

我正在尝试在我的视图控制器中以编程方式设置UICollectionView ,它扩展了UIViewController 。 出于某种原因,我的collections观点根本没有出现。 以下是我的。 为什么不出现? 我把它连接到委托和数据源,并将其作为subview添加到self.view 。 我的代码中缺less什么? 在我的.h文件中: @interface MainViewController : UIViewController { @private UICollectionView *_collectionView; NSMutableArray *_results; // data source array } @end 在我的.m文件中: @interface MainViewController () <UICollectionViewDataSource, UICollectionViewDelegateFlowLayout> @property (nonatomic, retain) UICollectionView *collectionView; @property (nonatomic, retain) NSMutableArray *results; @end @implementation MainViewController @synthesize collectionView = _collectionView; @synthesize results = _results; – (id)initWithNibName:(NSString […]

在哪里确定一个dynamic大小的UICollectionViewCell的高度?

我正在使用UICollectionViewFlowLayout。 我的单元格包含高度(行数)不同的UILabels。 看来获得单元格高度的最好方法是在UICollectionViewCell的子类中,因为那是我设置布局的位置并且可以访问我的视图的固有尺寸,但是: collectionView: layout: sizeForItemAtIndexPath:在collectionView: cellForItemAtIndexPath: delegate方法之前调用,这意味着我需要知道单元格的高度,然后才能获得单元格的实际布局。 到目前为止,我发现的一切似乎都太复杂了,比如从固定的单元格高度开始,在单元格加载标签之后引用实际高度,然后再次以正确的高度重新加载数据。 有一个更好的方法吗?

如何将一个背景图像添加到将滚动和缩放的单元格的UICollectionView

我正在使用UICollectionView构build马赛克视图。 我已经分类UICollectionViewFlowLayout来布局一个固定的网格,可以水平和垂直滚动。 我还附加了一个UIPinchGestureRecognizer,以便集合可以缩放/缩放。 集合中的每个单元格都包含具有某种透明度的UIImage。 我想添加一个背景图像,将滚动和放大单元格。 我尝试了许多不同的解决scheme。 使用colorWithPatternImage设置UICollectionView的背景颜色。 ( 不滚动/调整内容大小 ) 将每个单元格上的背景图像视图设置为背景图像的相关裁剪部分。 ( 使用太多内存 ) 我一直在寻找补充和装饰的意见,但努力让我的头。 我想我需要使用补充视图,因为在后台使用的图像将根据数据源而改变。 我不明白的是如何注册一个补充视图,以跨越整个集合视图的宽度和高度。 他们似乎被绑定到indexPath,即每个单元格。

UICollectionView performBatchUpdates在旋转设备时导致collectionview错位

如果我旋转设备而collectionview执行与reloadItemsAtIndexPathsBatchUpdate,集合视图将错位。 但观点仍然保持不变。 简单地解决这个问题: setting [UIView setAnimationEnabled: NO]; in willRotateToInterfaceOrientation + setting [UIView setAnimationEnabled: YES]; in didRotateToInterfaceOrientation 但我不认为这是解决这个问题的好方法。 有没有人有更好的主意? 干杯。 这是我的代码: – (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{ [super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration]; NSLog(@"Before Rotation"); NSLog(@"collecitonview Rect : %@", NSStringFromCGRect(self.collectionView.frame)); NSLog(@"view Rect : %@", NSStringFromCGRect(self.view.frame)); } – (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation{ [super didRotateFromInterfaceOrientation:fromInterfaceOrientation]; NSLog(@"After Rotation"); NSLog(@"collecitonview Rect : %@", NSStringFromCGRect(self.collectionView.frame)); NSLog(@"view Rect : %@", NSStringFromCGRect(self.view.frame)); […]

大的UICollectionViewCell随着自定义布局而消失

我subclassed UICollectionViewLayout 。 到现在为止还挺好。 但是,我有一些比屏幕更宽的单元格,有时在滚动时会消失。 当你再滚动一下,他们就会神奇地重新出现在他们应该在的地方。 我可以告诉你我的代码,但是我认为没有错,因为它在90%的情况下工作。但是,真正的大单元(超过屏幕尺寸的两倍)有时会消失。 NSMutableArray* attributes = [NSMutableArray array]; for (int section=0; section < [[self collectionView] numberOfSections]; section++) { [attributes addObject:[self layoutAttributesForSupplementaryViewOfKind:UICollectionElementKindSectionHeader atIndexPath:[NSIndexPath indexPathForItem:0 inSection:section]]]; for (int row=0; row < [[self collectionView] numberOfItemsInSection:section]; row++) { NSIndexPath* indexPath = [NSIndexPath indexPathForItem:row inSection:section]; [attributes addObject:[self layoutAttributesForItemAtIndexPath:indexPath]]; } } return attributes; 我也有这些post: UICollectionView的单元格消失 , UICollectionView中的 […]

UICollectionViewCell用内在大小展开/折叠

我有一个自定义stream布局的集合视图,以及许多不同高度的不同单元格。 收集视图的宽度在设备旋转时发生变化,因此单元格宽度必须相应更改。 为此,我实现了“sizeForItemAtIndex”方法,并根据当前的界面方向返回不同的大小。 大多数单元不会改变它们的高度,但是,当用户点击它时,我想要展开和折叠一个单元格。 您可以假定该单元格只有一个带有一行或多行文本的UILabel。 当单元格第一次出现时,行数被设置为1,当用户点击单元格时,行数被设置为0,这里单元格应该使用标签的固有尺寸自动改变其高度。 我怎样才能达到这个效果? 这是一个应该看起来像什么的例子:

ios的 – 在uicollectionview的底部添加加载指标

在iOS中是否有内置的支持,在UICollectionView中添加一个“loader”(UIActivityIndi​​cator),这样每次用户滚动到最后一个数据单元时,他都会看到另一个带有加载指示符的水平子视图?