Nano Hash - криптовалюты, майнинг, программирование

Ячейки UICollectionView вообще не разделяются

У меня есть представление коллекции, которое является делегатом и источником данных, и с макетом, определенным следующим образом:

- (id)initWithCoder:(NSCoder *)aDecoder{ 
    self = [super initWithCoder:aDecoder];
    if (self){
        self.dataSource = self;
        self.delegate = self;
        UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
        layout.minimumLineSpacing = 0;
        layout.sectionInset = UIEdgeInsetsMake(0, 8, 0, 8);
        layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
        layout.footerReferenceSize = CGSizeMake(1, 70);
        layout.itemSize = CGSizeMake(60, 70);
        layout.minimumInteritemSpacing = 4.0f;
        [self setCollectionViewLayout:layout];
    }
    return self;
}

Код выполняется правильно, за исключением минимального интервала между элементами.

Результатом является представление коллекции, в котором элементы в каждом разделе вообще не имеют пробелов.

Минимальное значение интервала, которое я установил, должно быть скорректировано вверх, а не вниз, верно?

Так почему же результат, который я вижу, такой же, как на этом экране? (Я раскрасил каждый элемент коллекции, чтобы было ясно, что нет пробелов)

CollectionView

Для более подробной информации, вот кадры, которые я регистрирую, как вы можете видеть, третий элемент начинается сразу после второго (145 пикселей = 85 (предыдущий элемент. x) + 60 (предыдущий элемент. ширина)) без интервала.

2014-04-22 10:25:49.954 App[15172:60b] self <PhotoIndexCollectionViewCell: 0x16576630; baseClass = UICollectionViewCell; frame = (8 0; 60 70); layer = <CALayer: 0x165777a0>>

2014-04-22 10:25:49.955 App[15172:60b] self <PhotoIndexCollectionViewCell: 0x16578380; baseClass = UICollectionViewCell; frame = (85 0; 60 70); layer = <CALayer: 0x16578520>>

2014-04-22 10:25:49.955 App[15172:60b] self <PhotoIndexCollectionViewCell: 0x16586620; baseClass = UICollectionViewCell; frame = (145 0; 60 70); layer = <CALayer: 0x165866c0>>

Что я здесь неправильно понимаю?

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

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

  • прочитайте этот ответ stackoverflow.com/questions/17229350/ . Я думаю, это поможет вам. 22.04.2014
  • Я пробовал это, но все еще не работал. Я установил минимум 20 пикселей, чтобы увидеть, появится ли что-то, но все равно между ячейками нет интервала. 22.04.2014

Ответы:


1

Вы можете использовать следующие методы Delegate для установки интервала:

// Layout: Set cell size
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {

 //    NSLog(@"SETTING SIZE FOR ITEM AT INDEX %ld", (long)indexPath.row);
       CGSize mElementSize = CGSizeMake(150, 36);
       return mElementSize;
}

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

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

// Layout: Set Edges
 - (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section {
   // return UIEdgeInsetsMake(0,8,0,8);  // top, left, bottom, right
      return UIEdgeInsetsMake(0,0,0,0);  // top, left, bottom, right
}
22.04.2014
  • У меня все эти методы уже реализованы, с моими значениями конечно, а результата нет. 22.04.2014
  • stackoverflow.com/questions/17229350/ и stackoverflow .com/questions/13017257/ перейдите по этой ссылке 22.04.2014
  • Я принимаю ваш ответ, потому что в моем случае интервал не работал из-за ошибки в построителе интерфейсов. Так что на самом деле правильный путь, конечно, с методами делегата, на которые вы указываете. Спасибо 26.01.2015
  • @Axy: В чем была ошибка? Я столкнулся с той же проблемой 05.04.2017

  • 2

    Как указано в документации Apple, пространство может быть скорректировано вверх. Но похоже, что оно также может быть скорректировано вниз. Я, честно говоря, не очень понимаю, почему, и у меня нет времени исследовать это прямо сейчас (я столкнулся с проблемой и должен закончить свою работу;)) - это может быть просто ошибка в макете Apple, потому что это представляется таким простым

    https://developer.apple.com/documentation/uikit/uicollectionviewflowlayout/1617706-minimuminteritemspacing?changes=latest_minor

    Во всяком случае, я вижу два пути решения этой проблемы:

    1 - Вычислите границы контейнера коллекции (в функции viewDidLayout?), добавив ширину всех элементов (если ширина не фиксирована) или установите для нее значение (itemWidth + MinimumSpace) * numberOfItems + MinimumSpace (для первого заполнения)

    2 - Радикальный способ (тот, который я выбрал): я вставляю содержимое своей ячейки в представление, которое вставляется в размере, который я хочу. Это просто не может не сработать.

    Всем привет

    10.11.2017
  • Что-то не так. Не подскажете, где в документации указано, что расстояние между ячейками может быть меньше запрошенного? Это минимальный InteritemSpacing, поэтому я ожидаю, что он будет не менее .. 10.11.2017
  • да. Плохо... Этот интервал используется для вычисления того, сколько элементов может поместиться в одну строку, но после того, как количество элементов определено, фактический интервал может быть скорректирован в сторону увеличения. - Я ошибаюсь, не вниз, а вверх. Однако я подозреваю, что в Apple Layout есть ошибка. 10.11.2017
  • Я внес некоторые изменения в свой ответ - надеюсь, он станет понятнее. - Одно можно сказать наверняка, решение 2 быстрое и работает без головной боли. 10.11.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..