我有一个包含UICollectionView的UIViewController。但是UICollectionView并没有填满所有的UIViewController。
我发现有一个空间,其高度等于单元格与UICollectionView顶边之间的NavigationBar高度。我不知道如何在UICollectionView中将单元格位置设置为(0,0)。 (像这样,空间是红色矩形)
我找到了这个链接How do I set the position of a UICollectionViewCell?我继承了UICollectionViewFlowLayout(以下是我的代码)
MZMCollectionViewFlowLayout.h
#import <UIKit/UIKit.h>
@interface MZMCollectionViewFlowLayout : UICollectionViewFlowLayout
@end
MZMCollectionViewFlowLayout.m
#import "MZMCollectionViewFlowLayout.h"
@implementation MZMCollectionViewFlowLayout
- (CGSize)collectionViewContentSize
{
return [super collectionViewContentSize];
}
- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect
{
return [super layoutAttributesForElementsInRect:rect];
}
- (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"MZMCollectionViewFlowLayout layoutAttributesForItemAtIndexPath");
if (indexPath.section == 0 && indexPath.row == 1) // or whatever specific item you're trying to override
{
UICollectionViewLayoutAttributes *layoutAttributes = [UICollectionViewLayoutAttributes layoutAttributesForCellWithIndexPath:indexPath];
layoutAttributes.frame = CGRectMake(0,0,100,100); // or whatever...
return layoutAttributes;
}
else
{
return [super layoutAttributesForItemAtIndexPath:indexPath];
}
}
@end
并像这样使用它:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
// hide the tool bar
[self.navigationController setToolbarHidden:YES animated:YES];
// set title
self.navigationItem.title = @"User Album";
[self.userAlbumView setCollectionViewLayout:[[MZMCollectionViewFlowLayout alloc] init]];
}
但它不起作用。日志 NSLog(@“MZMCollectionViewFlowLayout layoutAttributesForItemAtIndexPath”); 不显示。空白仍在那里。
感谢您的帮助!
答案 0 :(得分:16)
仅供参考,这里的回答更为正确:UICollectionView adds top margin
问题是视图控制器是自动调整滚动视图插入。这可以在代码或IB中关闭。在代码中设置:
self.automaticallyAdjustsScrollViewInsets = NO;
答案 1 :(得分:1)
回答自己的问题。
我在layoutAttributesForElementsInRect中打印了每个UICollectionViewLayoutAttribute信息:并且发现我需要的是更改frame.orgin.y
以下是我的代码:
- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect
{
NSArray *attributes = [super layoutAttributesForElementsInRect:rect];
NSMutableArray *result = [[NSMutableArray alloc] initWithCapacity:[attributes count]];
for (int i=0; i< [attributes count]; i++) {
UICollectionViewLayoutAttributes *attr = (UICollectionViewLayoutAttributes *)[attributes objectAtIndex:i];
// the key code "attr.frame.origin.y - 63"
[attr setFrame:CGRectMake(attr.frame.origin.x, attr.frame.origin.y - 63, attr.bounds.size.width, attr.bounds.size.height)];
//NSLog(@"attr h=%f w=%f x=%f y=%f", attr.bounds.size.height, attr.bounds.size.width, attr.frame.origin.x, attr.frame.origin.y);
[result addObject:attr];
}
return result;
}
然后它运作正常。