18

У меня есть UICollectionView с пользовательским UICollectionViewLayout (на самом деле, я использую this nice layout).UICollectionView contentOffset changes with custom layout

Я установил contentOffset = CGPointZero в видуDidLoad. После viewDidLoad, однако, смещение -20, а содержание получает толкнул вниз, как так:


picture

(Он должен быть на одном уровне с линией). Я загружаю макет представления коллекции в построителе интерфейса. Похоже, что моя проблема очень похожа на this one, однако решения там не работают для меня.

Я пробовал модифицировать collectionViewContentSize в моей реализации макета, чтобы он всегда был больше размера коллекции. Хотя это означает, что я могу прокрутить свой контент вниз (он короче высоты коллекцииView) и скрыть лишнее пространство, я также могу прокрутить назад, чтобы увидеть его.

Ничто не работает!

ответ

13

Единственное решение, которое я мог придумать, что было едва приемлемое поведение:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView { 
    if (self.collectionView.contentOffset.y < 0) { 
     self.collectionView.contentOffset = CGPointMake(self.collectionView.contentOffset.x, 0.0); 
    } 
} 

, а также установки высоты содержимого к fmax(self.collectionView.frame.size.height + 20, [self stackedSectionHeight]) в collectionViewContentSize

Это удаляет пространство над секции заголовок, но он удаляет «отскок» сверху. Довольно субоптимальное решение, но довольно приемлемое.

Я приму лучший ответ, если у кого-нибудь есть, или если я найду его, я обновлю этот ответ.

+1

У меня такая же проблема при использовании горизонтальной компоновки. –

+0

В веритальной компоновке содержание в порядке. при изменении объекта макета, который должен быть горизонтальным, все содержимое исчезает –

+0

Такая же проблема и то же решение, которое я нашел. Я получаю это только на SDK iOS7 и только при работе на iOS7.Самое странное, что другой scrollView в другом viewController не имеет этой проблемы .. Я ломаю голову, но не нашел причины –

45

Я нашел причину, по которой это происходит. Проверьте принятый ответ от этого вопроса: Status bar and navigation bar appear over my view's bounds in iOS 7

В самом деле, мы могли бы просто установить edgesForExtendedLayout или automaticallyAdjustsScrollViewInsets свойства UIViewController в IB (если вы используете раскадровку) из в viewDidLoad и исправит нашу проблему.

Только не забудьте проверить это свойство доступно, потому что в iOS6 или до это приведет к аварии:

if ([self respondsToSelector:@selector(setAutomaticallyAdjustsScrollViewInsets:)]) { 
    self.automaticallyAdjustsScrollViewInsets = NO; 
} 

С уважением!

+6

Обратите внимание, что если у вас есть контроллер представления коллекции, содержащийся в родительском контроллере представления, вам нужно установить 'автоматическиAdjustsScrollViewInsets 'на контроллере * parent *. – zoul

+0

У меня был случай, когда я хотел разместить коллекциюView с ячейками 74h на 30w, которые менялись с -44 каждый раз, когда я переходил с родительского контроллера представления на другой. Пытался решить это почти два часа, пытаясь так много неправильных путей. Благодарю. – devdc

0

Я начал искать эту проблему, появляющуюся на iOS 11, где у меня было прокручивание в прокрутке. Мне потребовался почти день, чтобы понять это.

настройка поведения регулировки врезки содержания Try:

if #available(iOS 11.0, *) { 
    scrollView.contentInsetAdjustmentBehavior = .never 
} 

Это фиксированное мою CollectionView регулируя это врезка содержания вниз небольшое количество как CollectionView кадр будет двигаться мимо безопасной зоны ограждающей Scrollview.