UIView 的可访问性文本是否可以根据其接收焦点的方向进行更改。
示例:
我有一个如下所示的布局,顶部标签,然后是集合视图,然后是底部标签。
集合视图有 4 个单元格(对于本示例),并且这些单元格启用了 isAccessibilityElement,因此 Voice over 可以读取每个单元格的内容,而不是整个集合视图。
这个集合视图基本上是一个包含行和列的表格。
当 Voice Over (VO) 焦点从“顶部标签”转移(顶部 -> 底部)到“单元格 1”时,“单元格 1”的辅助功能文本应为 '
查询:
当 VO 的焦点从“单元格 4”转移(底部 -> 顶部)到“底部标签”时,单元格 4 的可访问文本可以是 '
UIView 的辅助功能文本无法根据其接收到的焦点方向进行更改。
存在三个问题:
我建议更改要宣布的项目,并提示“1 of 5”或“x of 5”。 这意味着当您访问该项目时,它只会显示“1”,然后短暂暂停后,它会显示“1 of 5”。
这是执行此操作的示例:
import SwiftUI
struct ContentView: View {
var body: some View {
VStack {
ZStack {
Rectangle()
.frame(height: 40)
.foregroundStyle(.orange)
Text("Top Label")
}
.background(.orange)
.frame(height: 100)
.cornerRadius(10)
MyCollectionView()
.background(.gray)
ZStack {
Rectangle()
.frame(height: 40)
.foregroundStyle(.orange)
Text("Bottom Label")
}
}
.padding()
}
}
struct MyCollectionView: View {
static var items = [1, 2, 3, 4, 5]
@AccessibilityFocusState private var isFocused: Bool
var body: some View {
ScrollView {
LazyVGrid(columns: [GridItem(.adaptive(minimum: 100))]) {
ForEach(MyCollectionView.items, id: \.self) { item in
MyCollectionItem(item: item)
}
}
.padding(40)
}
}
}
struct MyCollectionItem: View {
let item: Int
@State
var value: String = ""
var body: some View {
ZStack {
Rectangle()
.foregroundColor(.blue)
.frame(height: 100)
.cornerRadius(10)
Text(String(item))
.accessibilityHint("\(item) of \(MyCollectionView.items.count)")
}
}
}
#Preview {
ContentView()
}