2017-01-17 3 views
0

Я уже посмотрел: -Уменьшить interitem интервал в UICollectionView

UICollectionView distance between cells?

Cell spacing in UICollectionView

Decrease Space between UICollectionViewCells

, но ни один из них не работает для меня.

Я также попытался реализации UICollectionViewDelegateFlowLayout и реализован

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat { 
    return 3 
} 

, но это не имеет никакого влияния на него.

Пожалуйста, обратите внимание на следующие скриншоты, принятых в iPhone 7/iPhone 5s/iPhone 7 Plus (заказ картина та же)

iPhone 7

iPhone 5S

iPhone 7 Plus

Я также выглядели самонастраивающимися ячейками, но я не хочу самонастраивающиеся ячейки, так как мой размер элемента всегда фиксирован и соответствует моим требованиям.

Я также установил минимальный интервал ячеек в раскадровке, но это не влияет на макет.

Как уменьшить большой промежуток между двумя ячейками (промежуточный интервал), избегать обрезания в iPhone 5S, а также пустые пространства с правой стороны в iPhone 7 Plus (вы не можете видеть, так как фон белый)

Любые идеи будут оценены.

+0

http://stackoverflow.com/a/40261279/4601170 –

ответ

3

Если ваша ячейка «Исправлена», вы не можете избежать разрыва, потому что у вас жестко закодирована фиксированная ширина!

Вам необходимо рассчитать общую ширину коллекции и отобразить ее на 2, а также указать расстояние между элементами, а не «фиксированный» размер. Быстрый типизированных пример:

(расчет cellsize)

CGFloat spacing = 3.0f 
CGFloat itemWidth = collectionView.frame.size.width/2 - spacing 
CGSize totalSize = itemWidth, itemWidth 
+0

Я попробую это и вернусь к вам. Спасибо, ответ кажется очень логичным. –

+0

@DarkInnocence Np, я настоятельно рекомендую вам использовать автозапуск для сотовых представлений при скриншотах, поэтому, если у вас есть экран smalleR/large, вы всегда будете поддерживать дизайн. –

+0

Работает как очарование: D !! Огромное спасибо. Btw, авто-макет уже был реализован. –

0

Попробуйте установить width и height каждой ячейки sizeForItemAtIndexPath метода.

- (CGSize)collectionView:(UICollectionView *)collectionView 
        layout:(UICollectionViewLayout *)collectionViewLayout 
    sizeForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    CGRect screenRect = [[UIScreen mainScreen] bounds]; 
    CGFloat screenWidth = screenRect.size.width; 
    float cellWidth = screenWidth/2.0; //Replace the divisor with the column count requirement. Make sure to have it in float. 

    CGFloat screenHeight = screenRect.size.height; 
    screenHeight = screenHeight - 114.0; // Sum of Bottom View & Top View Height 

    float cellHeight = screenHeight /(totalArray.count/2); //totalArray contains item used to show in collectionview 

    if(DEFAULT_CELL_HEIGHT > cellHeight){ 
     cellHeight=DEFAULT_CELL_HEIGHT; 
    } 

    CGSize size = CGSizeMake(cellWidth, cellHeight); 

    return size; 
} 
0

@ Ответ Хаузина в порядке, чтобы избавиться от расстояния в разных устройствах. Для интервала между ячейками (minimumInteritemSpacingForSectionAt), вы сделали свой контроллер просмотра соответствующим этому протоколу (UICollectionViewDelegateFlowLayout)?

+0

Да, я уже упоминал об этом в моем вопросе. –

+0

Да, вы внедрили метод там. Но я спрашиваю, действительно ли вы соответствовали этому протоколу в коде. 'MyViewController: UIViewController, UICollectionViewDelegateFlowLayout' –

+0

Да, я сделал это. До решения Хаузина я вычислял неправильную ширину (жестко кодированную ширину) –

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