CollectionViewItem未在iPhoneX屏幕上正确分配

时间:2018-01-09 07:19:55

标签: ios uicollectionview uicollectionviewcell

我的iOS应用程序尚未支持iPhoneX布局。

这是我的应用程序没有iPhoneX的启动屏幕(1124x2436,2436x1124)。

因此,在iPhoneX上,我的应用程序显示在735x1334区域。没关系。

现在我在视图的顶部添加了UICollectionView。 我指定了CollectionViewItem的大小,以便 CollectionView水平有6个项目

在iPhone8(iOS11.2)上,CollectionViewItems 按我的意图分配

但是在iPhoneX(iOS11.2)上,CollectionView有2行,第一行是空白的,所以它甚至可以滚动。

enter image description here

如果您按照我的意愿告诉我如何布置我的collectionview,我会很感激。

我的代码如下,

查看Controller.m

- (void)loadView
{
    self.view = [[FirstView alloc] init];
}

FirstView.m

- (id)init
{
    self = [super init];
    if (self) {
        self.backgroundColor = UIColor.whiteColor;

        [self initGridView];
    }
    return self;
}

- (void)initGridView
{
    _gridView = [[GridView alloc] init];

    [self addSubview:_gridView];
}

- (void)layoutSubviews
{
    [super layoutSubviews];

    [self layoutGridView];
}

- (void)layoutGridView
{
    CGSize parentSize = _gridView.superview.frame.size;

    _gridView.frame = CGRectMake(0, 0, parentSize.width, 48);
}

GridView.m

- (id)init
{
    self = [super initWithFrame:CGRectZero collectionViewLayout:[[UICollectionViewFlowLayout alloc] init]];
    if (self) {
        self.delegate = self;
        self.dataSource = self;

        [self registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:NSStringFromClass([UICollectionViewCell class])];

        self.backgroundColor = UIColor.grayColor;
    }

    return self;
}

#pragma mark -
#pragma mark UICollectionViewDataSource

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(nonnull NSIndexPath *)indexPath
{
    NSString *cellName = NSStringFromClass([UICollectionViewCell class]);
    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellName forIndexPath:indexPath];

    if (indexPath.row % 2  == 0) {
        cell.contentView.backgroundColor = UIColor.blueColor;
    }
    else {
        cell.contentView.backgroundColor = UIColor.orangeColor;
    }

    return cell;
}

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
    return 6;
}

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
    CGSize selfSize = self.frame.size;
    CGFloat width = selfSize.width / 6;

    return CGSizeMake(width, 48);
}

- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section
{
    return 0;
}

- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section
{
    return 0;
}

1 个答案:

答案 0 :(得分:1)

我已通过在init()文件的GridView.m方法中添加以下行来解决此问题。

if #available(iOS 11.0, *) {
  self.collectionView.contentInsetAdjustmentBehavior = .never
} else {
  // Fallback on earlier versions
}

谢谢。