82. Применяем pull-to-refresh в SwiftUI

82. Применяем pull-to-refresh в SwiftUI

Oleg991

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

Демонстрация

Демонстрация pull-to-refresh с использованием модификатора refreshable

Реализация

За основу я взял экран из статьи № 20, где я показывал пример работы с модификатором task и добавил модификатор refreshable:

struct RefreshableExample: View {
  var body: some View {
    ViewWithTaskExample()
      .refreshable { // <- да, все так просто
        print("обновляем!")
      }
  }
}

Ключевые моменты

Все перечисленное актуально на момент публикации статьи, когда максимальная версия iOS на горизонте - 18:

  1. Модификатор refreshable работает и с List, и с обычным ScrollView, но List поддерживается с iOS 15, а ScrollView - с iOS 16. Так что если вам нужно затащить на свой скролл такой модификатор и поддерживать iOS < 16, то будьте готовы делать кастомную реализацию модификатора (которых уже немало в интернете)
  2. refreshable работает с async/await, а значит нужно помнить про отмену таска, о чем нам напоминают в документации
  3. Изменить вид "колеса" у стандартного модификатора нельзя

Заключение

Теперь в моих статьях рассмотрены все ключевые варианты работы с асинхронными задачами на вьюхе, т.е. task и refreshable 😁

Делать свои аналоги стандартных фичей нам уже не привыкать, и refreshable для iOS < 15 никого уже не должен пугать, ведь у нас есть GeometryReader и Combine

Другие мои статьи по разработке можно посмотреть тут, а про инвестиции - тут.

Report Page