2015-12-12 4 views
0

enter image description hereкак я могу создать представление коллекции как в этом образе

я нужен первый две ячейки небольшой второй две большие снова два маленьких две большие. Я пробовал с ниже code.but его не дает мне надлежащего output.else любую стороннюю библиотеку, которую легко реализовать для this.eagerly ждет ответа на этот вопрос.

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{ 
    if (collectionView == _CollectionSale) { 
     if (small && j != 2){ 
      j++; 
      if(j==2){ 
       small = false; 
       k = 0; 

      } 
      HomeSaleCC *objHomeSaleCC=[collectionView dequeueReusableCellWithReuseIdentifier:@"HomeSaleCC" forIndexPath:indexPath]; 
      return objHomeSaleCC; 
     }else if(!small && k !=2){ 
      k++; 
      if(k==2){ 
       small = true; 
       j = 0; 
      } 
      HomeSaleCC2 *objHomeSaleCC2=[collectionView dequeueReusableCellWithReuseIdentifier:@"HomeSaleCC2" forIndexPath:indexPath]; 
      return objHomeSaleCC2; 
     } 

     HomeSaleCC *objHomeSaleCC=[collectionView dequeueReusableCellWithReuseIdentifier:@"HomeSaleCC" forIndexPath:indexPath]; 
     return objHomeSaleCC; 


    } 
    else{ 

    HomeTabCC *objHomeTabCC=[collectionView dequeueReusableCellWithReuseIdentifier:@"HomeTabCC" forIndexPath:indexPath]; 
    [objHomeTabCC.btnSale setTitle:[arrTitle objectAtIndex:indexPath.row] forState:UIControlStateNormal]; 
    [objHomeTabCC.btnSale setTitleColor:[UIColor orangeColor] forState:UIControlStateSelected]; 
    if (indexPath.row == i) { 
     objHomeTabCC.viewLine.hidden =NO; 
     objHomeTabCC.btnSale.selected =YES; 
    } 
    else{ 
     objHomeTabCC.viewLine.hidden =YES; 
     objHomeTabCC.btnSale.selected =NO; 
    } 
    return objHomeTabCC; 
    } 
} 
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath{ 
    if (collectionView == _CollectionSale) { 
     if (small && j != 2){ 
      j++; 
      if(j==2){ 
       small = false; 
       k = 0; 
      } 
      return CGSizeMake(153, 186); 
     } 

    else if(!small && k !=2){ 
     k++; 
     if(k==2){ 
      small = true; 
      j = 0; 
     } 
     return CGSizeMake(260, 186); 
    }else{ 
     return CGSizeMake(260, 186); 
    } 

    } 
    else{ 
     return CGSizeMake(260, 186); 
    } 
} 
+0

Вы прочь к неправильному начала - вы не должны использовать фиксированные размеры, но динамические зависимости от размера изображения, которое будет отображаться. И лучшее имя переменной, что мало, k и j? – luk2302

+0

Мне не нужна камера размера изображения, мне нужны фиксированные первые две маленькие, а не две большие –

+0

Я сомневаюсь в этом. Вам действительно нужно только прочитать, как использовать методы делегата представления коллекции. Остальное просто и прямо. – luk2302

ответ

2

Поддержка @ ответ beyowulf, я написал код для этой проблемы, вы можете find that here, проверить в CollectionViewTest раздел:

- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView { 
    return 1; 
} 


- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { 

    return 7; 
} 

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { 
    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"smallCell" forIndexPath:indexPath]; 
    [cell.contentView setBackgroundColor:[UIColor redColor]]; 

    if (indexPath.row%4 < 2) { 
     [cell.contentView setBackgroundColor:[UIColor greenColor]]; 
    } 
    return cell; 
} 

-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { 
    if (indexPath.row % 4 < 2) { 
     return CGSizeMake([UIScreen mainScreen].bounds.size.width/2 - 15.0f, 80.0f); 
    } 
    return CGSizeMake([UIScreen mainScreen].bounds.size.width/2 - 15.0f, 200.0f); 
} 

Это выглядит примерно так:

enter image description here

1

Я не уверен, что делает остальная часть вашего кода, но если все, что вы хотите, это два мелкоклеточный затем две большие клетки, вы можете сделать это таким образом:

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath{ 
    if (indexPath.item % 4 < 2) { 

      return CGSizeMake(collectionView.bounds.size.width*0.5-someSpacing, 186); 
     } 
     return CGSizeMake(collectionView.bounds.size.width*0.5-someSpacing, 186*2); 
} 

Хотя я рекомендовал бы возвращение

Смежные вопросы