2017-12-25 9 views
1

私はUICollectionViewでグリッドビューを作成していて、ページングでスクロールしたいと思っています。グリッドビュー(UICollectionView)のオフセットがページングスクロールで徐々にシフトします

今問題があります。グリッドのオフセットは、ページングスクロールによって徐々ににシフトします。

次のページセルの左上を画面の上に合わせたいと思います。

enter image description here

私のコードは、以下のように

ViewController.mある

- (void)loadView 
{ 
    UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; 
    layout.scrollDirection = UICollectionViewScrollDirectionVertical; 

    self.view = [[GridView alloc] initWithLayout:layout]; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.navigationController.navigationBarHidden = YES; 
} 

- (BOOL)prefersStatusBarHidden 
{ 
    return YES; 
} 

GridView.m

#define GRID_SPACE (20) 

- (id)initWithLayout:(UICollectionViewFlowLayout *)layout 
{ 
    self = [super initWithFrame:CGRectZero collectionViewLayout:layout]; 
    if (self) { 
     self.pagingEnabled = YES; 

     self.backgroundColor = UIColor.redColor; 

     self.delegate = self; 
     self.dataSource = self; 

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

#pragma mark - 
#pragma mark UICollectionViewDelegate 

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    CGSize selfSize = self.frame.size; 
    return CGSizeMake((selfSize.width - GRID_SPACE)/2, (selfSize.height - GRID_SPACE)/2); 
} 

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

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

私は感謝しますあなたが私に良い解決策を提供するならば。

ありがとうございます。

答えて

1

(UICollectionViewが継承する)UIScrollViewのページサイズは、ビューポートのサイズであるため、動作させるために、上に赤い枠線の高さを含める必要があります。ボーダーを上または下に表示したくない場合は、の下に置くか、上に揃えた場合はディスプレイ上部に表示させることができます。

+0

申し訳ありませんが、私はあなたが言っているものを手に入れることができませんでした。私が設定する必要があるコードまたは正確なプロパティ名を私に教えてください。 –

+0

私はあなたの提案を試み、それは私の問題を解決しました。ありがとうございました。 –

0

LGPの回答が私の問題を解決しました。私は私のGridView.mに追加解決済みのコードはtheightがページングスクロールの長さであるため、

は、CollectionViewの高さにグリッド項目の長さを追加し、以下の通りです。 さらに、グリッドアイテムの長さをCollectionViewのインセットの一番下に設定する必要があります。 GridView.mで

- (void)layoutSubviews 
{ 
    [super layoutSubviews]; 

    CGSize parentSize = self.superview.frame.size; 

    self.frame = CGRectMake(0, 0, parentSize.width, parentSize.height + GRID_SPACE); 
} 

- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section 
{ 
    return UIEdgeInsetsMake(0, 0, GRID_SPACE, 0); 
} 
関連する問題