SwiftUI:如何仅将修饰符应用于特定元素?
Posted
技术标签:
【中文标题】SwiftUI:如何仅将修饰符应用于特定元素?【英文标题】:SwiftUI: How to apply modifiers only to specific elements? 【发布时间】:2021-02-08 21:56:53 【问题描述】:所以我有这个非常简化的代码,我基本上有一个带有自定义修饰符的 HStack。
我的问题是,如何将修饰符保留在 HStack 上,但不要让修饰符应用于 HStack 内的按钮?
在这种情况下,我可以直接将修饰符应用于文本字段,但正如我所提到的,这是我的代码的一个非常简化的版本,所以我们假设修饰符必须在 HStack 上
这是代码
HStack
TextField("Enter a Froot", text: self.$searchTxt)
Button(action: print("Is cancelled"))
Text("Cancel")
.modifier(TFModifier())
这是修饰符
struct TFModifier : ViewModifier
func body(content: Content) -> some View
content.padding()
.background(Color("TesterColor"))
.overlay(
RoundedRectangle(cornerRadius: 20)
.stroke(Color.black.opacity(0.01), lineWidth: 4)
.shadow(color: Color("TesterColor3"), radius: 6, x: 5, y: 5)
.clipShape(RoundedRectangle(cornerRadius: 20))
)
【问题讨论】:
我将您的代码添加到项目中,它似乎按预期工作。 TFModifier 仅在 HStack 上。这里有什么问题? 我不希望修饰符应用于按钮@nicksarno 这能回答你的问题吗? How to apply shadow to interior views in SwiftUI? 【参考方案1】:在您的情况下,ViewModifier 认为内容是整个 HStack,这实际上是您最近告诉 SwiftUI 将我的 HStack 作为内容并作为内容使用 TFModifier 修改它!在这种情况下,没有办法告诉 SwiftUI 将 Button 排除在计算之外!这是100%不可能的! SwiftUI 不像 TFModifier 那样关心你的命名,它只关心传入的内容!就像我说的那样,您将整个 HStack 作为内容提供! 最好想想你想在哪里敏锐地应用这个修改!
【讨论】:
感谢您的回答,即使我使用自定义修饰符,我还能这样做吗?而且我不希望按钮有不同的修饰符,我希望它根本没有修饰符@swiftPunk以上是关于SwiftUI:如何仅将修饰符应用于特定元素?的主要内容,如果未能解决你的问题,请参考以下文章