Apple TV UICollectionView ошибка маржи - PullRequest
0 голосов
/ 25 мая 2018

У меня есть простой вид коллекции в viewController.Я настроил его с помощью следующего кода.

- (void)viewDidLoad {
    [super viewDidLoad];

    UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
    layout.sectionInset = UIEdgeInsetsMake(0, 0, 0, 0);
    layout.minimumInteritemSpacing = 0;
    layout.minimumLineSpacing = 0;
    layout.itemSize = CGSizeMake(372, 200);
    layout.scrollDirection = UIAccessibilityScrollDirectionDown;
    self.collection.collectionViewLayout = layout;

    [self.collection registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"cell"];
    self.collection.dataSource = self;
    self.collection.delegate = self;
}

, и у меня есть 2 ячейки просмотра.Найдите кодовую базу для cellForItemAtIndexPath

-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
    return 2;
}

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"cell" forIndexPath:indexPath];
    cell.layer.borderWidth = 1;
    [cell setLayoutMargins:UIEdgeInsetsMake(0, 0, 0, 0)];

    return cell;
}

Когда этот код выполняется, он выглядит следующим образом.enter image description here

Если ширина элемента изменяется на 373 и больше, чем выглядит;

enter image description here

Интервал между ячейками должен быть нулевым, но не меняется.У кого-нибудь есть идеи по поводу этой ошибки?

Ответы [ 2 ]

0 голосов
/ 22 июня 2018

SectionInset не интервал между элементами.Это пространство всего UICollectionView.Поэтому рассчитайте ширину всех элементов со всеми пробелами элементов в viewDidLoad следующим образом.

- (void)viewDidLoad {
    [super viewDidLoad];

    UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
    layout.minimumInteritemSpacing = 5;
    layout.minimumLineSpacing = 0;
    layout.itemSize = CGSizeMake(200, 200);

    CGFloat itemWidth = layout.itemSize.width + layout.minimumInteritemSpacing;

    CGFloat allItemWitdh = itemWidth * (int)(_collection.frame.size.width / itemWidth);
    CGFloat rightMargin = _collection.frame.size.width - allItemWitdh;
    layout.sectionInset = UIEdgeInsetsMake(0, 0, 0, rightMargin);

    layout.scrollDirection = UIAccessibilityScrollDirectionDown;
    self.collection.collectionViewLayout = layout;

    [self.collection registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"cell"];
}
0 голосов
/ 01 июня 2018

Это не ошибка.Для вашего экземпляра UICollectionViewFlowLayout вы устанавливаете минимальное пространство для строк и элементов, а не точные значения.Если вам нужно убрать пробелы между элементами, вы можете уменьшить sectionInset на UICollectionViewFlowLayout.Попробуйте этот код:

-(void)viewDidLayoutSubviews {

    [super viewDidLayoutSubviews];
    CGFloat leftMargin = 10.0;
    UICollectionViewFlowLayout* collectionViewLayout = (UICollectionViewFlowLayout*)self.collection.collectionViewLayout;
    CGFloat currentRowWidth = leftMargin;

    for (; currentRowWidth + collectionViewLayout.itemSize.width < self.collection.frame.size.width; currentRowWidth += collectionViewLayout.itemSize.width) {

    }
    CGFloat rightMargin = MAX(0.0, self.collection.frame.size.width - currentRowWidth);


    collectionViewLayout.sectionInset = UIEdgeInsetsMake(0, leftMargin, 0, rightMargin);
    [collectionViewLayout invalidateLayout];
}
...