2015-09-30 2 views
3
  • У меня есть вид прокрутки (диаграмма: слова), что намного больше, чем высота устройства
  • В нижней части окна прокрутки некоторой донную контента (диаграмма: французский пресс) с другим цветом фона.
  • Чтобы отделить нижнее содержание от слов, я создал верхний UIView, чтобы действовать как граница (диаграмма: красная линия)
  • У меня есть кнопка, которая находится на нижней части устройства, вне прокрутки (вид прокрутки - device.height - button.height). Цвет фона этой кнопки соответствует фону цвета нижнего содержимого.

Различные цвета фона выглядят довольно шаткими, без чего-либо, отделяющего нижнюю кнопку от содержимого, поэтому, пока нижний контент НЕ отображается, я бы хотел, чтобы граница была липкой и, казалось, сидела над нижняя кнопка (диаграмма: красная линия).сделать статическое UIView липкого, когда UIScrollView прокруткой

Небольшое примечание: я использую AutoLayout в IB, но у меня есть IBOutlet, созданный для ограничения границы, с которым я могу легко манипулировать кодом.

enter image description here

ответ

0

Я бы эти шаги:

  1. Поместите кнопку в представлении, что это за пределами scrollView.
  2. Положите потрясающее нижнее содержимое (которое, как я думал, было изображением головы Бендера) в том же представлении, что кнопка находится, и ограничивает его верхним, левым и правым краями.
  3. Установите нижний размер вложений содержимого прокрутки, чтобы они были равны высоте удивительного нижнего содержимого. Это покажет прокрутку, что можно прокрутить вниз, что многие пиксели ниже фактического конца прокручиваемого содержимого.
  4. Добавить UIScrollViewDelegate в прокрутку, которая реализует, по крайней мере, scrollViewDidScroll(_). В этом методе проверьте самое нижнее положение содержимого прокрутки. Если эта позиция попадает где-то в нижнюю вставку содержимого, которую вы установили на шаге №3, растяните или иначе переместите свое удивительное нижнее содержимое по вертикали на ту же сумму.

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

0

Есть, по крайней мере, два простых решения, которые мне приходят в голову.

Ключ, чтобы найти точку пересечения :

Content значение размера, где красная линия на взгляд прокрутки выходит снизу кнопки или идет в ниже кнопки.

Вариант 1: Добавить еще красную линию на верхней части кнопки и скрыть/показать (скрытые свойства) в scrollViewDidScroll, когда значение размера контента приближается точка пересечения

Вариант 2: ли значение размера контента приближается к методу удаления точек пересечения и переключается на просмотр красной линии от кнопки прокрутки до кнопки или наоборот. Повторно добавьте ограничения для определенного супервизора. Очевидно, вам нужно сделать это в коде.

3

Вот Lib, которая делает работу: https://github.com/ericcastro/ECStretchableHeaderView

(он работает с UITableView в образце, но реализация основана на UIScrollView)

Вы должны обновить код, изменив логику: Здесь вид сверху, но весь принцип есть!

1

Вы можете создать две границы. Первый - это динамическая граница в верхней части нижнего содержимого в прокрутке. Второй - это липкая рамка в верхней части кнопки вне прокрутки.

Вторая граница должна быть скрыта, когда видна первая граница. Для этого вам необходимо зарегистрировать UIScrollViewDelegate. Внедрите метод scrollViewDidScroll(_:). Просто проверьте, находится ли первая граница выше второй. Это может быть сделано с чем-то вроде этого:

if firstBorder.frame.origin.y < scrollView.contentOffset.y + scrollView.frame.height { 
    // firstBorder is on the screen, hide the secondBorder... 
    secondBorder.hidden = true 
} else { 
    secondBorder.hidden = false 
} 

Это может быть не 100% правильно для вас, потому что не ясно, закончится ли ваш UIScrollView над кнопкой или являются ли они дублируют друг друга. Отрегулируйте его, если граница скрывается слишком рано или слишком поздно.

Если ваша кнопка прозрачна, вы также должны скрыть первую границу, если она не показана, поскольку она может находиться под кнопкой. Затем просто добавьте в код строки firstBorder.hidden = false и firstBorder.hidden = true.

+0

Черт, это такая простая идея! – brandonscript

Смежные вопросы