2017-01-02 10 views
0

Я знаю, что липкий заголовок не новая вещь, чтобы спросить совета, но все-таки ...липкий заголовок с Scrollview и stackview

Я пытаюсь создать липкий заголовок (UIImageView) и скроллинг часть (UIScrollView с UIStackView в нем)

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

Возможно ли это как-то решить, что при прокрутке вверх содержимое содержимого стека прокручивается, а не исчезает? И начинает исчезать при исчезновении заголовка?

Спасибо

+0

Вы когда-нибудь это понимаете? – shoe

ответ

0

Самый простой способ сделать это состоит в использовании вида таблицы. Ваш липкий заголовок - это заголовок первого раздела таблицы, а прокручиваемая часть - вторая секция.

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

P.S. второе решение требует, чтобы вы включали перескакивание в режиме прокрутки. В противном случае заголовок будет скрыт, но не будет отображаться снова (если вы не сбросите контроллер)

L.E. Некоторые из них (старый) код для моего второго решения:

let headerHeight = self.headerView.height 
self.scrollHandler = { 
    var offset = self.detailsTable.contentOffset 

    self.headerTopConstraint.constant -= offset.y 
    if self.headerTopConstraint.constant < -headerHeight { 
     self.headerTopConstraint.constant = -headerHeight 

     let size = self.detailsTable.contentSize 
     if offset.y + self.detailsTable.frame.height > size.height { 
      offset.y = size.height - self.detailsTable.frame.height 
     } 

     self.detailsTable.contentOffset = offset 
    } 
    else { 
     if self.headerTopConstraint.constant > 0 { 
      self.headerTopConstraint.constant = 0 
     } 
     self.detailsTable.contentOffset = CGPointZero 
    } 
} 

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

+0

Но когда я установил scrollView.contentOffset.y в 'scrollViewDidScroll', он снова вызван и сбрасывает смещение на 0, и я не могу снова прокрутить его вправо? – kalafun

+0

@ kalafun Я добавил фрагмент кода, который я использовал в подобном случае. – DarkByte

+0

Очевидно, что ваш scrollview - это таблица в моем случае (detailsTable). – DarkByte