Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c UICollectionView布局间距问题。单元格之间的空间太大了_Objective C_Ios_Uicollectionview_Uicollectionviewcell - Fatal编程技术网

Objective c UICollectionView布局间距问题。单元格之间的空间太大了

Objective c UICollectionView布局间距问题。单元格之间的空间太大了,objective-c,ios,uicollectionview,uicollectionviewcell,Objective C,Ios,Uicollectionview,Uicollectionviewcell,我正在以编程方式设置我的UICollectionView,一切看起来都很正常,但当我测试我的应用程序时,我得到了一些非常奇怪的间距,包括垂直和水平间距。设置集合视图的MyLibraryViewController类可在此处找到:。我的LibraryCellinit如下所示: - (id)initWithFrame:(CGRect)frame { NSLog(@"Init called"); NSLog(@"%@", NSStringFromCGRect(frame)); self = [supe

我正在以编程方式设置我的
UICollectionView
,一切看起来都很正常,但当我测试我的应用程序时,我得到了一些非常奇怪的间距,包括垂直和水平间距。设置集合视图的My
LibraryViewController
类可在此处找到:。我的
LibraryCell
init如下所示:

- (id)initWithFrame:(CGRect)frame
{
NSLog(@"Init called");
NSLog(@"%@", NSStringFromCGRect(frame));
self = [super initWithFrame:frame];
if (self) {
    // Initialization code
    imageView = [[UIImageView alloc] initWithFrame:frame];
    [self.contentView addSubview:imageView];
}
return self;
}
因此,每次设置一个单元时,我都让它向我报告框架是什么。有趣的是,这些值看起来是正确的。下面是我的日志文件中显示帧位于正确位置的部分:

2012-12-12 11:08:48.333 ARApp2[16330:907] Init called
2012-12-12 11:08:48.335 ARApp2[16330:907] {{10, 10}, {80, 120}}
2012-12-12 11:08:48.341 ARApp2[16330:907] Loaded image0.png
2012-12-12 11:08:48.349 ARApp2[16330:907] success
2012-12-12 11:08:48.352 ARApp2[16330:907] Init called
2012-12-12 11:08:48.354 ARApp2[16330:907] {{120, 10}, {80, 120}}
2012-12-12 11:08:48.358 ARApp2[16330:907] Loaded image1.png
2012-12-12 11:08:48.365 ARApp2[16330:907] success
2012-12-12 11:08:48.368 ARApp2[16330:907] Init called
2012-12-12 11:08:48.370 ARApp2[16330:907] {{230, 10}, {80, 120}}
2012-12-12 11:08:48.375 ARApp2[16330:907] Loaded image2.png
2012-12-12 11:08:48.382 ARApp2[16330:907] success
但是当你在屏幕上看到结果时,它看起来是这样的:
此集合中有四个项目。前三个在第一排,所以你甚至看不到第三个。然后第四个开始下一排,但比我想要的低很多。有人知道为什么这些单元格间隔这么远吗?

imageView=[[UIImageView alloc]initWithFrame:frame]

这条线似乎是你的问题。你的图像视图应该是{(0,0),(80120)},但是你将其superview的帧指定为图像的帧,因此你得到的第二个图像的superview为{(120,10),(80120)},但是图像也有相同的偏移量和大小,这给了你疯狂的间距


tl;dr,将imageView帧设置为self.bounds,因为imageView应该占据整个superview。

这里的“self”是什么?你在调用哪个对象的initWithFrame?您是否知道视图的子视图有自己的坐标系,以(0,0)开始?如果这个对象(我想是某个UIView子类)有一个10,10和(某物,某物)的框架,并且您添加了一个带有(10,10)和(某物,某物)的子视图,那么您的子视图将从(20,20)开始。您的第二个子视图将在“self”的超视图坐标系内的(240,20)处开始。或者使用self.bounds添加填充整个空间的子视图是正确的方法。您是对的,self.bounds是正确的方法,因为每个图像都使用了整个帧。谢谢!这确实是问题所在。Self.bounds,而不是Self.view bounds-集合视图单元格已经是视图,它没有视图属性。