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?的主要内容,如果未能解决你的问题,请参考以下文章

使自定义 SwiftUI 视图适应内置修饰符

isPlaceholder 修饰符不可用且在小部件工具包 + SwiftUI 中不起作用

如何使我的自定义 ViewModifier 仅适用于 SwiftUI 中符合(可识别和视图)的内容/视图?

SwiftUI-自定义修饰符

如何指定将保存 SwiftUI 自定义视图的数组的类型信息

SwiftUI - 在视图中包装 Button,以创建自定义按钮