如何解决如何覆盖edgesIgnoringSafeArea或任何视图修饰符
我正在尝试覆盖 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)))
}
解决方法
我们不能覆盖修饰符,但我们可以添加我们自己的使用标准的修饰符,比如
extension View {
func edgesIgnoringHorizontal(_ edges: Edge.Set) -> some View {
self.edgesIgnoringSafeArea(edges.subtracting(.vertical))
}
}
注意:虽然我认为这样的 overriding
没有多大意义,因为仅使用 .edgesIgnoringSafeArea(.horizontal)
更简单、更明显和可读......但无论如何。
想出了如何做到这一点。我用 AnyView
包裹了我的视图,并对其应用了选择性安全区域。
@State private var edgesThatIgnoreSafeArea: Edge.Set = []
func edgesIgnoringSafeArea(_ edges: Edge.Set) -> some View {
edgesThatIgnoreSafeArea = edges
return AnyView(self).edgesIgnoringSafeArea(edges.subtracting(.vertical))
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。