UICollectionView 设置框架

Posted

技术标签:

【中文标题】UICollectionView 设置框架【英文标题】:UICollectionView setting Frame 【发布时间】:2016-07-18 08:16:41 【问题描述】:

我正在自定义导航栏下方以编程方式绘制集合视图,但如果它的框架发生如下变化,它将从顶部开始: CGRectMake(0.0,64.0 ,self.view.frame.size.width , self.view.frame.size .height)然后它在顶部显示黑屏我还附上了屏幕截图和代码。请告诉我如何在导航栏后开始框架并删除黑屏enter image description here:-

self.view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];


UICollectionViewFlowLayout *layout=[[UICollectionViewFlowLayout alloc] init];
collectionView_=[[UICollectionView alloc] initWithFrame:CGRectMake(0.0,64.0 ,self.view.frame.size.width , self.view.frame.size.height) collectionViewLayout:layout];


[collectionView_ setDataSource:self];
[collectionView_ setDelegate:self];

[collectionView_ registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"cellIdentifier"];
[collectionView_ setBackgroundColor:[UIColor redColor]];

[self.view addSubview:collectionView_];

【问题讨论】:

Cell spacing in UICollectionView的可能重复 可能你不需要这样做self.view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 【参考方案1】:

尝试查看automaticallyAdjustsScrollViewInsets - 似乎您正在尝试手动考虑导航栏,而系统也在尝试考虑导航栏。如果你想自己做,你需要通过调用告诉系统不:

self.automaticallyAdjustsScrollViewInsets = false;

来自您的视图控制器。

请参阅documentation 了解更多信息。

【讨论】:

【参考方案2】:

删除:

self.view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

否则你将self.view 移动到Navigation Bar 下,这就是你看到黑色的原因.. 不是因为UICollectionView。 你永远不会改变 UIViewController 的 self.view 框架

如果您将Navigation Bar 设置为不透明,您的原点将自动位于Navigation Bar 下。 你可以改变它:

self.navigationController.navigationBar.translucent = NO;

所以你的 UICollectionView 的框架将是:

CGRectMake(0.0, 0.0 ,self.view.frame.size.width , self.view.frame.size.height);

【讨论】:

【参考方案3】:

其实代码没什么问题,只是个bug而已。

collectionView_=[[UICollectionView alloc] initWithFrame:CGRectMake(0.0,64.0 ,self.view.frame.size.width , self.view.frame.size.height) collectionViewLayout:layout];

这一行将从顶部创建集合视图 y 位置 64。当有导航栏时这是正确的。但从图像中我可以看到您的控制器中没有导航栏。 因此,请添加导航栏或按照上述答案中的说明进行更改。 即相对于 UIScreen 设置 UICollection 视图。

self.view = [[UIView alloc] initWithFrame:[self.view bounds]];

然后你删除

self.view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

如@Jacopo Penzo 所述

希望这行得通。

【讨论】:

以上是关于UICollectionView 设置框架的主要内容,如果未能解决你的问题,请参考以下文章

UiCollectionView 间距问题 - 快速

RFQuiltLayout 和 UICollectionView

UICollectionView

如何在 UICollectionView 中居中行?

UICollectionView 中的多个部分

从 UICollectionViewCell 调用函数以在 UICollectionView 中使用