Обновлено для iOS14 - Xcode12

Содержание:

  • С iOS 13
  • С iOS14
  • Создание кода на основе версий
  1. В iOS 13

Список в SwiftUI по сути является UITableView UIKit. Таким образом, изменение внешнего вида UITableView также влияет на List. Простое изменение внешнего вида UITableView может обновить стиль представления списка.

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

Мы можем просто выполнить следующее в didFinishLaunchingWithOptions.

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.
    UITableView.appearance().separatorStyle = .none
    return true
}

Но если мы хотим обновить один конкретный список. Нам нужно сделать в нем onAppear и вернуть свойство обратно onDisappear, как показано ниже. Так что это влияет только на указанный список.

List {
   Text("Message 1")
   Text("Message 1")
   Text("Message 1")
   Text("Message 1")
   Text("Message 1")
   Text("Message 1")
}.onAppear {
   UITableView.appearance().separatorStyle = .none
   // can update any other property like tableFooterView etc
}.onDisappear { 
   //revert appearance so that it does not break other UI
   UITableView.appearance().separatorStyle = .singleLine
}

2. В iOS 14

В iOS 14 Apple не использует базу UITableView в качестве списка. В качестве обходного пути мы можем использовать LazyVStack с просмотром прокрутки, чтобы получить тот же результат.

ScrollView {
   LazyVStack(spacing: 0) {
     Text("Message 1")
     Text("Message 1")
     Text("Message 1")
     Text("Message 1")
     Text("Message 1")
     Text("Message 1")
   }
}

3. Создание кода на основе версий (последняя демонстрация):

Теперь мы можем объединить два вышеупомянутых, чтобы получить окончательный код, совместимый с версией, как показано ниже: