2016-01-06 2 views
6

Я хотел бы использовать UICollectionView, можно создать следующую структуру:2 различных размеров клеток в UICollectionView Objective C

something like that...

Как вы можете видеть, есть два разных размера ячейки. Один из них - 1/4 строки, другой - 3/4. Возможно ли создать такой макет с помощью UICollectionView?

Может ли кто-нибудь научить меня, как это сделать ??? Или есть какие-то образцы ??? Я уже изучил много учебников и ссылок. Но все еще не знаю, как это сделать.

Спасибо!

+0

да можно. взгляните на создание пользовательского макета для вашего 'UIControllerView', который создает желаемый интерфейс; вы можете начать, например. прочитав [Официальную документацию Apple] (https://developer.apple.com/library/ios/documentation/WindowsViews/Conceptual/CollectionViewPGforIOS/CreatingCustomLayouts/CreatingCustomLayouts.html) о том, как создавать собственные макеты. – holex

+0

Связаны ли две ячейки разных размеров? – Fogmeister

+0

@Fogmeister, вы думаете в пользовательском 'UITableViewCell'? :) – holex

ответ

8

Ну, на данный момент я строго кодировал ширину элемента (72.0 и 23.0). Остальная часть 5.0 будет использоваться в промежутке между интервалами и edgeInsets. Этот код даст вам именно то, что вы хотите.

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

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

#pragma mark - CollectionViewFlowLayout Methods 

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    CGSize newSize = CGSizeZero; 
    newSize.height = 100; 

    CGRect screenBounds = [[UIScreen mainScreen] bounds]; 
    CGSize screenSize = screenBounds.size; 

    if(indexPath.item % 4 == 0 || indexPath.item % 4 == 3) 
    { 
     //Size : 3/4th of screen 
     newSize.width = screenSize.width * 0.23; 
    } 
    else 
    { 
     //Size : 1/4th of screen 
     newSize.width = screenSize.width * 0.72; 

    } 
    return newSize; 
} 

- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section 
{ 
    return UIEdgeInsetsMake(10, 2.0, 10, 2.0); 
} 
+0

@Yvonne вы можете принять мой ответ? Заранее спасибо :) – nithinbhaktha

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

    return [(NSString*)[arrayOfStats objectAtIndex:indexPath.row] sizeWithAttributes:NULL]; 
} 

используя этот способ вы можете вернуть другой размер для ячейки. Пожалуйста, обратитесь по ссылке Dynamic cell width of UICollectionView depending on label width

0

Существуют различные способы для этого ...

  1. можно сделать путем реализации - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath метода.

  2. Вы можете полностью настроить представление коллекции, как описано в следующем учебном пособии, шаг за шагом.

    http://www.raywenderlich.com/107439/uicollectionview-custom-layout-tutorial-pinterest

  3. От макета destianation это выглядит, что внешний вид может быть легко получить с помощью использования даже UITableViewCell (загрузка как 1/4 размера и 3/4 размера ячейки в одной ячейке), а также изменение их размера с помощью autolayout.

+0

Спасибо, что ответили мне, я прочитал учебник по пользовательскому макету. Но я не мог понять. Не могли бы вы рассказать мне больше, как это сделать? Извините, что беспокою вас! – Yvonne