如何在SwiftUI View结构体内部直接为body添加修饰符(如AccessibilityIdentifier)?
解决方案
当然有优雅的实现方式,完全可以在MyView结构体内部完成,不需要外部修改或新增View层。
核心思路
SwiftUI的body要求返回单个View,所以首先需要用无布局容器(比如Group)将多个子View包裹起来,然后直接在这个容器上添加全局修饰符(比如accessibilityIdentifier)——Group不会改变原有View的布局逻辑,只是单纯组合视图,非常适合这种场景。
修改后的代码示例
public struct MyView: View { public var body: some View { Group { Text("My text 1") Text("My text 1") } .accessibilityIdentifier("my_view_global_identifier") // 还可以添加其他全局修饰符,比如.padding()、.background(Color.gray)等 } }
给单个子View加修饰符的场景
如果需要给每个Text单独设置accessibilityIdentifier,同样可以直接在内部处理:
public struct MyView: View { public var body: some View { Group { Text("My text 1") .accessibilityIdentifier("text_item_1") Text("My text 2") .accessibilityIdentifier("text_item_2") } } }
补充说明
你提供的原始代码本身存在编译问题:SwiftUI的body必须返回单个View,直接放置多个Text会报错,用Group(或VStack/HStack,如果需要指定布局方向)包裹是必要的步骤,刚好可以利用这个容器来统一添加修饰符,一举两得。
内容的提问来源于stack exchange,提问作者Mirek
相关产品推荐
相关产品推荐

