2015-02-11 3 views
0

У меня есть UIScrollView A (на самом деле UICollectionView), заполняющий экран внутри UINavigationController B. У регулятора Bs adjustScrollViewInsets установлено значение true.Как поддерживать минимальную высоту содержимого содержимого UIScrollView?

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

func scrollViewDidScroll(scrollView: UIScrollView) { 
    if (self.lastContentOffset < scrollView.contentSize.height - scrollView.frame.size.height && self.lastContentOffset > scrollView.contentOffset.y) { 
     // dragging down 
     if self.navigationController!.navigationBarHidden { 
      self.navigationController?.setNavigationBarHidden(false, animated: true) 
     } 
    } else if (self.lastContentOffset > 0 && self.lastContentOffset < scrollView.contentOffset.y) { 
     // dragging up 
     if !self.navigationController!.navigationBarHidden { 
      self.navigationController?.setNavigationBarHidden(true, animated: true) 
     } 
    } 

    self.lastContentOffset = scrollView.contentOffset.y 
} 

Теперь проблема, так как экран iPhone 6+ слишком велик, contentSize из вида прокрутки А меньше рамы (т.е. полного кадра экрана), когда навигация бар скрыт. В таком случае прокрутка не будет прокручиваться, и панель навигации больше не вернется.

Я хочу, чтобы вручную поддерживать высоту содержимого. Размер A для экрана не менее высоты + 1, но не знаю, как это сделать. Может ли кто-нибудь помочь? Или обеспечить лучшее решение?

BTW, я использую iOS 8 и Swift.

ответ

0

Сверху моей головы (я нахожусь на телефоне), contentSize - это не только для чтения, я думаю.

Как насчет изменения вручную до нужной суммы в зависимости от условий прокрутки и т. Д.?

Что-то вроде:

IF Navbar скрыт ТОГДА contentSize = все, что

1

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

NSInteger minScrollViewContentHeight = 100; 

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

if(scrollView.contentSize.height < minScrollViewContentHeight) 
    [scrollView setContentSize:CGSizeMake(scrollView.frame.size.width, minScrollViewContentHeight)]; 
0

Опция будет использовать появление и исчезновение клеток, чтобы вызвать показать/скрыть.

Используйте методы делегатов collectionView:willDisplayCell:forItemAtIndexPath: и collectionView:didEndDisplayingCell:forItemAtIndexPath: для обнаружения движения. Вы можете выработать направление с изменением индекса отображаемых или удаленных ячеек. Если вы не можете прокручивать экран, ничего не происходит.

0

Вам не нужно менять смещение (на самом деле это просто положение прокрутки), но contentSize. Это означает, что когда вы скрываете навигационную панель, увеличивайте contentSize по высоте навигации (не помните номера), а когда вы показываете навигационную панель, уменьшайте contentSize. Или ... Используйте метод AutoLayout и layoutIfNeeded после отображения/скрытия панели навигации.

0

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

ScrollView может быть немного проще, поскольку вы можете напрямую изменять размер содержимого. Если вы используете autoLayout, попробуйте добавить ограничение равных высот между contentView и самим scrollView. Что-то вроде строк contentView.height = scrollView.height + scrollMin;

Для моего столаView я должен был подклассифицировать UITableView и переопределить setSize setter.

#define MIN_SCROLL 60 

- (void)setContentSize:(CGSize)contentSize { 
    //take insets into account 
    UIEdgeInsets insets = self.contentInset; 
    CGFloat minHeight = self.frame.size.height - insets.top - insets.bottom + MIN_SCROLL; 
    if(contentSize.height < minHeight) { 
    contentSize.height = minHeight; 
    } 
    [super setContentSize:contentSize]; 
} 
Смежные вопросы