SwiftUI:自定义视图修饰符不符合 ViewModifier?
Posted
技术标签:
【中文标题】SwiftUI:自定义视图修饰符不符合 ViewModifier?【英文标题】:SwiftUI: custom view modifier not conforming to ViewModifier? 【发布时间】:2021-08-10 20:23:19 【问题描述】:我正在尝试创建这个修饰符:
struct CustomTextBorder: ViewModifier
func body(content: Content) -> some View
return content
.font(.largeTitle)
.padding()
.overlay(
RoundedRectangle(cornerRadius: 15)
.stroke(lineWidth: 2)
)
.foregroundColor(.blue)
当我这样做时,我收到Type 'CustomTextBorder' does not conform to protocol 'ViewModifier'
错误。
看来我得补充一下:
typealias Body = <#type#>
但是,我看到修改器的创建方式与我最初在此处所做的一样,而无需提供 typealias Body...
这个修饰符在这里起作用:
https://www.simpleswiftguide.com/how-to-make-custom-view-modifiers-in-swiftui/
为什么它对我不起作用?
我怎样才能使这个修饰符起作用?为什么它对某些人有效而对其他人无效?这是否取决于项目的目标?我的目标是 ios 15。
【问题讨论】:
这段代码对我来说很好。 【参考方案1】:您的代码运行良好,但为什么要使用 ViewModifier?这个简单的东西你不需要 ViewModifier,你可以这样使用扩展:
struct ContentView: View
var body: some View
Text("Hello, World!").customTextBorder
extension Text
var customTextBorder: some View
return self
.font(.largeTitle)
.padding()
.overlay(
RoundedRectangle(cornerRadius: 15)
.stroke(lineWidth: 2)
)
.foregroundColor(.blue)
【讨论】:
【参考方案2】:没有看到你的实现,看起来你没有初始化修饰符。确保您使用末尾的大括号CustomTextBorder()
。请记住,它仍然是一个需要调用的函数。
Text("SwiftUI Tutorials")
.modifier(CustomTextBorder())
如果您扩展 View
,则相同
extension View
func customTextBorder() -> some View
return self.modifier(CustomTextBorder())
【讨论】:
以上是关于SwiftUI:自定义视图修饰符不符合 ViewModifier?的主要内容,如果未能解决你的问题,请参考以下文章
isPlaceholder 修饰符不可用且在小部件工具包 + SwiftUI 中不起作用