[英]SwiftUI custom Image Modifier
我正在尝试创建一个使用resizable()
函数的自定义图像修改器,因此我的content
应该是一个Image
。 至少,我是这么认为的。
错误消息:类型“IconModifier”不符合协议“ViewModifier”
struct IconModifier: ViewModifier {
func body(content: Image) -> some View {
content
.resizable()
.aspectRatio(contentMode: .fit)
.frame(width: 10, height: 10, alignment: .center)
}
}
您可以改为扩展Image
。
像这样使用:
struct ContentView: View {
var body: some View {
VStack {
Text("Hello World!")
Image("someName")
.imageIconModifier()
}
}
}
Image
扩展:
extension Image {
func imageIconModifier() -> some View {
self
.resizable()
.aspectRatio(contentMode: .fit)
.frame(width: 10, height: 10, alignment: .center)
}
}
你首先得到错误:
类型“IconModifier”不符合协议“ViewModifier”
这意味着您的IconModifier
不满足ViewModifier
协议的要求,如果我们看到定义:
func body(content: Self.Content) -> Self.Body
而你有:
func body(content: Image) -> Self.Body
这不起作用。 所以接下来 - 我们将把它改为Content
而不是Image
:
“IconModifier.Content”(又名“_ViewModifier_Content”)类型的值没有成员“可调整大小”
这基本上是说任何View
都没有.resizable()
修饰符。 .resizable()
修饰符仅在extension Image
内部定义,因此没有其他View
具有此修饰符。
这就是核心问题 - 无法通过ViewModifier
的content
参数访问原始View
(我们想要的Image
)。
这就是为什么我只是为Image
做了一个扩展。
希望这个解释有帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.