SwiftUI AccessibilityHidden 仍然可选择
SwiftUI AccessibilityHidden Still Selectable
处理与辅助功能相关的所有事情,发现 .accessibilityHidden(true) 似乎无法正常工作。即使 VO 没有读取任何内容,它仍然会在您在页面上滑动时显示白框。我解决这个问题的唯一方法是在整个东西周围放置一个 VStack 然后它似乎没问题,但是它会截断模拟器中的 welcomeBodyText 而不是在真实设备上,这令人担忧,因为我需要确保它有效在所有设备上。
由于HeaderNav只显示logo和公司名称,没有理由选择它,也没有在每个页面上读出,所以我想完全隐藏它不让VO看到,然后立即跳转到阅读welcomeHeaderText通过 welcomeBodyText。
HeaderNav.swift
import SwiftUI
struct HeaderNav: View {
var body: some View {
VStack {
Spacer()
.frame(minHeight: 26, idealHeight: 26, maxHeight: 26)
.fixedSize()
HStack(spacing: 16) {
Spacer()
Image(decorative: "LogoHeader")
.resizable()
.aspectRatio(contentMode: .fit)
.frame(width: 70)
Text(LocalizationStrings.companyName)
.fontWeight(.light)
.foregroundColor(Color("WhiteText"))
.font(.system(size: 34))
.tracking(0.8)
Spacer()
} // End HStack
.accessibilityElement(children: .ignore)
.accessibilityLabel(LocalizationStrings.companyName)
} // End VStack
}
}
WelcomeTextView.swift
import SwiftUI
struct WelcomeTextView: View {
var body: some View {
Section {
VStack { // This is what needed to be added to make it work but causes issues in the simulator
HeaderNav()
.accessibilityHidden(true)
VStack(spacing: 10) {
Group {
HeaderText(text: LocalizationStrings.welcomeHeaderText)
BodyText(text: LocalizationStrings.welcomeBodyText)
} // End Group (Page Description)
.pageDescr()
} // End VStack
} // End VStack to make it work
.accessibilityElement(children: .combine)
} // End Section
.listRowBackground(Color("mainbkg"))
.listRowSeparator(.hidden)
}
}
pageDescr 是一个视图修改器,看起来像:
struct PageDescr: ViewModifier {
func body(content: Content) -> some View {
VStack(alignment: .leading, spacing: 20) {
content
}
.padding(EdgeInsets(top: 5, leading: 32.0, bottom: 25, trailing: 32.0))
}
}
这是导致问题的顶部填充,所以我在 VStack 的结束 } 上方的 HeaderNav 中使用了一个固定大小的垫片,并将顶部填充设置为 0。现在它起作用了。
像这样:
Spacer()
.frame(minHeight: 32, idealHeight: 32, maxHeight: 32)
.fixedSize()
处理与辅助功能相关的所有事情,发现 .accessibilityHidden(true) 似乎无法正常工作。即使 VO 没有读取任何内容,它仍然会在您在页面上滑动时显示白框。我解决这个问题的唯一方法是在整个东西周围放置一个 VStack 然后它似乎没问题,但是它会截断模拟器中的 welcomeBodyText 而不是在真实设备上,这令人担忧,因为我需要确保它有效在所有设备上。
由于HeaderNav只显示logo和公司名称,没有理由选择它,也没有在每个页面上读出,所以我想完全隐藏它不让VO看到,然后立即跳转到阅读welcomeHeaderText通过 welcomeBodyText。
HeaderNav.swift
import SwiftUI
struct HeaderNav: View {
var body: some View {
VStack {
Spacer()
.frame(minHeight: 26, idealHeight: 26, maxHeight: 26)
.fixedSize()
HStack(spacing: 16) {
Spacer()
Image(decorative: "LogoHeader")
.resizable()
.aspectRatio(contentMode: .fit)
.frame(width: 70)
Text(LocalizationStrings.companyName)
.fontWeight(.light)
.foregroundColor(Color("WhiteText"))
.font(.system(size: 34))
.tracking(0.8)
Spacer()
} // End HStack
.accessibilityElement(children: .ignore)
.accessibilityLabel(LocalizationStrings.companyName)
} // End VStack
}
}
WelcomeTextView.swift
import SwiftUI
struct WelcomeTextView: View {
var body: some View {
Section {
VStack { // This is what needed to be added to make it work but causes issues in the simulator
HeaderNav()
.accessibilityHidden(true)
VStack(spacing: 10) {
Group {
HeaderText(text: LocalizationStrings.welcomeHeaderText)
BodyText(text: LocalizationStrings.welcomeBodyText)
} // End Group (Page Description)
.pageDescr()
} // End VStack
} // End VStack to make it work
.accessibilityElement(children: .combine)
} // End Section
.listRowBackground(Color("mainbkg"))
.listRowSeparator(.hidden)
}
}
pageDescr 是一个视图修改器,看起来像:
struct PageDescr: ViewModifier {
func body(content: Content) -> some View {
VStack(alignment: .leading, spacing: 20) {
content
}
.padding(EdgeInsets(top: 5, leading: 32.0, bottom: 25, trailing: 32.0))
}
}
这是导致问题的顶部填充,所以我在 VStack 的结束 } 上方的 HeaderNav 中使用了一个固定大小的垫片,并将顶部填充设置为 0。现在它起作用了。
像这样:
Spacer()
.frame(minHeight: 32, idealHeight: 32, maxHeight: 32)
.fixedSize()