#swift #swiftui #safearea
#swift #swiftui #safearea
Вопрос:
Я пытаюсь переопределить функциональность edgesIgnoringSafeArea(_:)
, поскольку, на мой взгляд, у меня есть пользовательская обработка для вертикальной безопасной области. Однако для вызова super нет, поэтому я не уверен, как поступить, кроме обработки каждого края безопасной области. Любые советы будут оценены.
// Will use later for custom handling of vertical safe area
@State private var edgesThatIgnoreSafeArea: Edge.Set = []
func edgesIgnoringSafeArea(_ edges: Edge.Set) -> some View {
edgesThatIgnoreSafeArea = edges
// There is no super here to call, and calling self would just call this function again
return AnyView(edgesIgnoringSafeArea(edges.subtracting(.vertical)))
}
Ответ №1:
Мы не можем переопределить модификаторы, но мы можем добавить наши собственные, которые используют стандарт, например
extension View {
func edgesIgnoringHorizontal(_ edges: Edge.Set) -> some View {
self.edgesIgnoringSafeArea(edges.subtracting(.vertical))
}
}
Примечание: хотя я не вижу в этом особого смысла overriding
, потому что простое использование of .edgesIgnoringSafeArea(.horizontal)
проще, более очевидно и читаемо… но в любом случае.
Комментарии:
1. Выяснил способ переопределения. Смотрите мой ответ.
Ответ №2:
Выяснил, как это сделать. Я обернул свой вид AnyView
и применил к нему выборочную безопасную область.
@State private var edgesThatIgnoreSafeArea: Edge.Set = []
func edgesIgnoringSafeArea(_ edges: Edge.Set) -> some View {
edgesThatIgnoreSafeArea = edges
return AnyView(self).edgesIgnoringSafeArea(edges.subtracting(.vertical))
}
Комментарии:
1. Определенно открыт для отзывов об этом ответе или других ответах, если у кого-то есть лучший подход.