UICollectionView iOS8错误偏移

时间:2014-10-18 11:22:28

标签: ios8 uicollectionview

令人惊讶的是,更新到iOS8后,我的应用与iOS7中的行为不同。 特别是,我用UICollectionView创建了一个日历。在iOS7正常,月份单元格正确显示。但在iOS8 ...... enter image description here

我看到顶部偏移,细胞向上移动......我不明白,真的......代码非常简单。

- (void)viewDidLoad
{
    [super viewDidLoad];
 UINib * nib = [UINib nibWithNibName:@"AgendaYearCollectionCell" bundle:[NSBundle mainBundle]];
    [self.collectionView registerNib:nib forCellWithReuseIdentifier:agendaYearCellIdentifier];
    [self.collectionView setDelegate:self];
    [self.collectionView setDataSource:self];
    UICollectionViewFlowLayout *layout  = [[UICollectionViewFlowLayout alloc] init];
    layout.minimumInteritemSpacing      = 0;
    layout.minimumLineSpacing           = 1;
    [self.collectionView setCollectionViewLayout:layout];
}

该集合不可滚动。如果我使它可滚动,我可以滚动并查看第一行的单元格。但我不想要一个可滚动的集合。 我认为问题出现在插图中。事实上,如果我玩:

- (UIEdgeInsets)collectionView:
(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section {
    return UIEdgeInsetsMake(40, 2, 50, 60);

 }

我最终可以再次获得第一行。但是如何计算所有屏幕/设备的值?我的应用程序仅适用于风景,仅适用于iPad。 Apple改变了什么?

1 个答案:

答案 0 :(得分:0)

您的集合视图具有负顶部偏移量。提供更多代码可能有所帮助,但让我们先尝试一下。

您致电:

- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView
                    layout:(UICollectionViewLayout *)collectionViewLayout
    insetForSectionAtIndex:(NSInteger)section

除非你想为不同的部分设置不同的插图,否则我不会这样称呼它。看起来你只有一个部分。我将使用Flow Layout配置它:

flowLayout.sectionInset = CGSizeMake(40.0, 2.0, 50.0, 60.0);

我建议放弃iOS 7支持,所有iOS 7设备都可以升级到8。

  

如何计算所有屏幕/设备的值?

对于任何iPad都应该是相同的偏移量。即使Apple将iPad发布更大的屏幕,你的偏移也是一样的。如果您想要支持iPhone的通用应用程序,您可以根据设备范例进行设备状态检查并分配不同的数字。

此外,它可能是顶部的东西。你搞乱了导航栏吗?它没有从图片中清楚。