Обновлено для iOS14 - Xcode12
Содержание:
- С iOS 13
- С iOS14
- Создание кода на основе версий
- В 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. Создание кода на основе версий (последняя демонстрация):
Теперь мы можем объединить два вышеупомянутых, чтобы получить окончательный код, совместимый с версией, как показано ниже: