2012-12-12 105 views
1

我正在以编程方式设置我的UICollectionView,一切看起来都很合适,但是当我测试我的应用程序时,我得到了一些非常奇怪的空间,无论是垂直还是水平。我的LibraryViewController班,设置收集视图可以在这里找到:LibaryViewController class。我LibraryCell初始化看起来是这样的:UICollectionView布局间距问题。单元格之间的空间太大

- (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 

但是,当你看到屏幕上的结果,它看起来像这样:Screenshot 这个系列共有四个项目在里面。前三名在第一排,所以你甚至看不到第三名。然后第四个开始下一行,但比我想要的低。任何人都可以看到为什么这些细胞间隔很远?

+0

什么是“自我”在这里?你打给哪个对象的initWithFrame?你知道一个视图的子视图有自己的以(0,0)开头的坐标系吗?如果这个对象(我猜想有些UIView子类)有一个10,10和(东西,东西)的框架,并且你添加了一个子视图(10,10)和(东西,东西),那么你的子视图将从(20, 20)。你的第二个子视图将在你的“自我”的超视图的坐标系内的(240,20)开始。 –

回答

3

imageView = [[UIImageView alloc] initWithFrame:frame];

此行似乎是你的问题。您的图像视图应该是{(0,0),(80,120)},但是您将其超级视图的帧分配为图像的帧,因此您可以看到第二个图像的超视图为{(120,10), (80,120)}但图像也有相同的偏移量和大小,这给你疯狂的间距。

tl; dr,将您的imageView框架设置为self.bounds,因为您的imageView应占据整个超级视图。

+1

或使用self.bounds,这是添加填充整个空间的子视图的正确方法。 – jrturton

+0

你是对的,self.bounds是正确的方法,因为整个帧被用于每个图像。 – Stakenborg

+0

谢谢!这确实是问题所在。 – user1040854