2016-11-16 35 views
0

一直嘗試使用UICollectionView對齊我的單元格並啓用分頁功能。不幸的是,當嘗試這樣做時,我永遠無法讓細胞在中心對齊。當我滾動收集時,細胞總是稍微偏離。我試圖爲縱向和橫向視圖做到這一點。香港專業教育學院使用的插圖被嘗試和中心的細胞和它們的位置:啓用分頁功能的UICollectionView Center單元格

- (UIEdgeInsets)collectionView: 
(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section { 
    CGFloat cellSpacing = ((UICollectionViewFlowLayout *) collectionViewLayout).minimumLineSpacing; 
    CGFloat cellWidth = ((UICollectionViewFlowLayout *) collectionViewLayout).itemSize.width; 
    NSInteger cellCount = [collectionView numberOfItemsInSection:section]; 
    CGFloat inset = (collectionView.bounds.size.width - ((cellCount) * (cellWidth + cellSpacing))) * 0.5; 
    inset = MAX(inset, 0.0); 

    if(UIDeviceOrientationIsPortrait([UIDevice currentDevice].orientation)){ 
     return UIEdgeInsetsMake(50.0,inset,0.0,inset); // top, left, bottom, right 
    } 
    else{ 
     return UIEdgeInsetsMake(50.0,inset,0.0,inset); // top, left, bottom, right 
    } 
} 

我再變線間距:

-(CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*) 
collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section{ 

    CGFloat cellSpacing = ((UICollectionViewFlowLayout *) collectionViewLayout).minimumLineSpacing; 
    CGFloat cellWidth = ((UICollectionViewFlowLayout *) collectionViewLayout).itemSize.width; 
    NSInteger cellCount = [collectionView numberOfItemsInSection:section]; 
    CGFloat inset = (collectionView.bounds.size.width - ((cellCount-1) * (cellWidth + cellSpacing))) * 0.5; 
    inset = MAX(inset, 0.0); 

    if(UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation)){ 

     NSLog(@"Changed to landscape Spacing"); 
     return inset; 

    } 
    else{ 

     return inset; 
    } 

我的細胞的大小都在這裏設置:

-(CGSize) 
    collectionView:(UICollectionView *) collectionView 
    layout:(UICollectionViewLayout*)collectionViewLayout 
    sizeForItemAtIndexPath:(NSIndexPath *)indexPath{ 

    //Set Landscape size of cells 
    if(UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation)){ 
     CGFloat cellWidth = [[UIScreen mainScreen] bounds].size.width-360; 
     CGFloat cellHeigt = [[UIScreen mainScreen] bounds].size.height-60; 
     NSLog(@"Is Landscape"); 
     return CGSizeMake(cellWidth, cellHeigt); 
    } 
    //Set Potrait size of cells 
    else{ 
     CGFloat cellWidth = [[UIScreen mainScreen] bounds].size.width-60; 
     CGFloat cellHeigt = [[UIScreen mainScreen] bounds].size.height-160; 
     NSLog(@"Is Portrait"); 
     return CGSizeMake(cellWidth, cellHeigt); 
    } 
} 
+0

您是否已啓用對屬性檢查器中集合視圖的分頁?而不是使用像360或60這樣的幻數,您應該使用相對於屏幕大小的值,即基於屏幕寬度/高度的分割(因爲它可能會在具有不同屏幕大小的設備上失敗)。 – Rikh

+0

是的,我使用這些'魔術'數字,以便我可以爲單元格獲得合適的大小。你會如何建議我獲得最好的細胞大小?至於分頁,我通過集合代理啓用它。 'coll.pagingEnabled = YES;' –

+0

嗯,我不確定你試圖達到什麼,但不是試圖操縱單元格的內容視圖(因爲它留下了錯誤空間),我只是簡單地設置單元格爲整個屏幕寬度,然後使用autoLayout將其內容居中。如果您可以發佈您想要實現的圖像,也許我可以提供幫助! – Rikh

回答

1

而不是嘗試以編程方式設置框架,您可以簡單地設置單元格佔用整個寬度UICollectionView並使用autoLayout將內容居中,這樣您就不必考慮界面變化和不同屏幕尺寸作爲autoLayout將爲您處理。在您的數據源,

-(CGSize) 
    collectionView:(UICollectionView *) collectionView 
    layout:(UICollectionViewLayout*)collectionViewLayout 
    sizeForItemAtIndexPath:(NSIndexPath *)indexPath{ 

    return CGSizeMake(collectionView.bounds.size.width, collectionView.bounds.size.height) 
} 

設置你的所有項目間的間距爲0,並啓用分頁爲UICollectionView

接下來只需使用的autoLayout設置內容到細胞內中心!

+0

是的,正如我想要的,感謝您的幫助:) –

0

試試這個。你必須採取UICollectionViewFlowLayout並設置它的滾動方向,最小空間並附加到集合視圖佈局。

UICollectionViewFlowLayout *flowLayout; 

    - (void)viewDidLoad { 
     [super viewDidLoad]; 
    flowLayout = [[UICollectionViewFlowLayout alloc]init]; 

     flowLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal; 
     flowLayout.minimumInteritemSpacing = 0.0; 

     flowLayout.minimumLineSpacing = 0.0; 

     _obj_CollectionView.pagingEnabled = YES; 
     _obj_CollectionView.collectionViewLayout = flowLayout; 
    } 

如果你想垂直滾動修改它。

希望它能起作用。

+0

謝謝,我會給這個鏡頭 –