如何覆盖edgesIgnoringSafeArea(或任何视图修改器)
Posted
技术标签:
【中文标题】如何覆盖edgesIgnoringSafeArea(或任何视图修改器)【英文标题】:How to override edgesIgnoringSafeArea (or any View modifier) 【发布时间】:2020-12-31 06:15:59 【问题描述】:我正在尝试覆盖edgesIgnoringSafeArea(_:)
的功能,因为我在视图中对垂直安全区域进行了自定义处理。但是,没有超级可以调用,所以我不确定除了处理每个安全区域边缘之外如何进行。任何建议将不胜感激。
// 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
没有多大意义,因为仅使用 .edgesIgnoringSafeArea(.horizontal)
更简单、更明显、更易读……但无论如何。
【讨论】:
想出了一种方法来进行覆盖。看我的回答。【参考方案2】:想出了如何做到这一点。我用AnyView
包裹了我的视图,并对其应用了选择性安全区域。
@State private var edgesThatIgnoreSafeArea: Edge.Set = []
func edgesIgnoringSafeArea(_ edges: Edge.Set) -> some View
edgesThatIgnoreSafeArea = edges
return AnyView(self).edgesIgnoringSafeArea(edges.subtracting(.vertical))
【讨论】:
如果有人有更好的方法,绝对愿意接受对此答案或不同答案的反馈。以上是关于如何覆盖edgesIgnoringSafeArea(或任何视图修改器)的主要内容,如果未能解决你的问题,请参考以下文章
使用 .edgesIgnoringSafeArea() 时,SwiftUI 布局超出设备范围
在我的 NavigationView '.edgesIgnoringSafeArea' 中不会将内容移动到安全区域之外
SwiftUI - edgesIgnoringSafeArea 在 iOS 13.4 中的行为不同