82. Применяем pull-to-refresh в SwiftUI
Oleg991В UIKit у нас есть UIRefreshControl, который подключается к экрану со скроллом, например, к таблице или коллекции, и пользователь может потянуть сверху вниз, чтобы обновить данные на экране. В SwiftUI есть модификатор refreshable, в этой статье пройдемся по основным моментам.
Демонстрация

Реализация
За основу я взял экран из статьи № 20, где я показывал пример работы с модификатором task и добавил модификатор refreshable:
struct RefreshableExample: View {
var body: some View {
ViewWithTaskExample()
.refreshable { // <- да, все так просто
print("обновляем!")
}
}
}
Ключевые моменты
Все перечисленное актуально на момент публикации статьи, когда максимальная версия iOS на горизонте - 18:
- Модификатор
refreshableработает и сList, и с обычнымScrollView, ноListподдерживается с iOS 15, аScrollView- с iOS 16. Так что если вам нужно затащить на свой скролл такой модификатор и поддерживать iOS < 16, то будьте готовы делать кастомную реализацию модификатора (которых уже немало в интернете) refreshableработает сasync/await, а значит нужно помнить про отмену таска, о чем нам напоминают в документации- Изменить вид "колеса" у стандартного модификатора нельзя
Заключение
Теперь в моих статьях рассмотрены все ключевые варианты работы с асинхронными задачами на вьюхе, т.е. task и refreshable 😁
Делать свои аналоги стандартных фичей нам уже не привыкать, и refreshable для iOS < 15 никого уже не должен пугать, ведь у нас есть GeometryReader и Combine ✅
Другие мои статьи по разработке можно посмотреть тут, а про инвестиции - тут.