Как сделать прокрутку UIScrollView наверх?
ios
objective-c
iphone
uiscrollview
uikit
Джек Хамфрис
источник
источник
UIScrollView
contentInset
, к сожалению.[self.scrollView setContentOffset:CGPointMake(self.scrollView.contentOffset.x, -self.scrollView.contentInset.top) animated:YES];
делает работу для меня[scrollView setContentOffset:CGPointMake(0, -scrollView.contentInset.top) animated:YES];
Это работает в iOS 6 и 7[scrollView setContentOffset:CGPointMake(0, scrollView.contentSize.height-scrollView.frame.size.height) animated:YES];
Вот расширение Swift, которое облегчает:
Использование:
источник
iOS 11 и выше
попробуй поработай с новым
adjustedContentInset
.Например (прокрутите вверх):
источник
Для Swift 4
источник
использование
setContentOffset:animated:
источник
Ответ для Swift 2.0 / 3.0 / 4.0 и iOS 7+:
источник
В iOS7 у меня были проблемы с получением определенного вида прокрутки для перехода наверх, который работал в iOS6, и использовал это, чтобы настроить вид прокрутки для перехода наверх.
источник
Версия Swift 3.0.1 от Rob Mayoff :
источник
Чтобы полностью копировать поведение строки состояния scrollToTop, нам нужно не только установить contentOffset, но и убедиться, что отображаются scrollIndicators. В противном случае пользователь может быстро потеряться.
Единственный публичный способ сделать это
flashScrollIndicators
. К сожалению, вызов его один раз после установки contentOffset не имеет никакого эффекта, потому что он сбрасывается немедленно. Я обнаружил, что это работает, когда делает вспышку каждый раз вscrollViewDidScroll:
.В вашем UIScrollViewDelegate (или UITable / UICollectionViewDelegate) реализуйте это:
Задержка скрытия немного короче по сравнению с поведением scrollToTop в строке состояния, но все равно выглядит хорошо.
Обратите внимание, что я злоупотребляю тэгом представления для сообщения о состоянии «isScrollingToTop», потому что мне это нужно через контроллеры вида. Если вы используете теги для чего-то другого, вы можете заменить это на iVar или свойство.
источник
Я думаю, что у меня есть ответ, который должен быть полностью совместим с iOS 11, а также с предыдущими версиями (для вертикальной прокрутки)
При этом учитывается новое значение selectedContentInset, а также учитывается дополнительное смещение, необходимое при включении prefersLargeTitles на навигационной панели, которое, по-видимому, требует дополнительного смещения в 52 пикселя поверх значения по умолчанию.
Это было немного сложно, потому чтоsetContentInset изменяется в зависимости от состояния titleBar (большой заголовок против маленького заголовка), поэтому мне нужно было проверить и посмотреть, какова была высота titleBar, и не применять смещение 52px, если оно уже находится в большом состоянии. Не удалось найти какой-либо другой метод для проверки состояния navigationBar, поэтому, если у кого-то есть лучший вариант, чем видеть, является ли высота> 44,0, я бы хотел услышать его
Вдохновленный решением Якуба
источник
Это очень распространено, когда ваша панель навигации перекрывает небольшую часть содержимого scrollView и выглядит так, будто контент начинается не сверху. Для исправления я сделал 2 вещи:
источник
Прокрутка к началу для
UITableViewController
,UICollectionViewController
или любогоUIViewController
имеющейUIScrollView
источник
В SWIFT 5 Просто установите смещение контента на ноль
источник
Я перепробовал все способы. Но у меня ничего не получалось. Наконец-то мне это понравилось.
Я добавил
self.view .addSubview(self.scroll)
строку кода в viewDidLoad. После начала настройки рамки для просмотра с прокруткой и добавления компонентов для просмотра с прокруткой.Это сработало для меня.
Убедитесь, что вы добавили
self.view .addSubview(self.scroll)
строку в начале. Затем вы можете добавить элементы пользовательского интерфейса.источник