Post

Replies

Boosts

Views

Activity

Reply to .disabled() doesn't VISUALLY disable buttons inside ToolbarItem on iOS 26 devices
It looks like it does have to do with how the button's label is declared. Here's my post about another bug where a button's hit target shrinks based on its label declaration: SwiftUI Button with Image view label has smaller hit target So if I change this sample code to use a label: closure with a Label() view, the button does appear gray when disabled. Interestingly though, it still responds to taps with a bounce animation, even though the action isn’t triggered. That’s still inconsistent with how disabled buttons behave outside of a toolbar. Also, the button grows slightly wider when disabled. Code var body: some View { NavigationStack { VStack { Button{ print("Body button tapped") } label: { Label("Body Button", systemImage: "checkmark") } .labelStyle(.titleOnly) .buttonStyle(.borderedProminent) .disabled(isButtonDisabled) Toggle("Disable buttons", isOn: $isButtonDisabled) Spacer() } .padding() .navigationTitle("Device: \(osTitle)") .navigationBarTitleDisplayMode(.large) .toolbar { ToolbarItem { Button { print("Toolbar button tapped") } label: { Label("Toolbar", systemImage: "checkmark") } .labelStyle(.titleOnly) .buttonStyle(.borderedProminent) .disabled(isButtonDisabled) } } } }
Topic: UI Frameworks SubTopic: SwiftUI Tags:
Oct ’25
Reply to .disabled() doesn't VISUALLY disable buttons inside ToolbarItem on iOS 26 devices
Thanks for the reply. Even with that button declaration, it still won't work when the label: closure contains a Text() element like this: Code Button { print("Checkmark button tapped") } label: { Text("Checkmark") } .buttonStyle(.borderedProminent) .disabled(isButtonDisabled) Recording As I mentioned in my original post, I already filed this as FB19313064. But I’ll update the report to clarify that it only affects buttons that don’t use the label: closure with a Label() element.
Topic: UI Frameworks SubTopic: SwiftUI Tags:
Aug ’25
Reply to .disabled() doesn't VISUALLY disable buttons inside ToolbarItem on iOS 26 devices
Changing to .plain, does make make the .disabled() modifier work on an iOS 26 device (toolbar button visually becomes "grayed out"): But I’m trying to match the behavior of stock iOS 26 apps like Reminders and Calendar, where the checkmark/save button is disabled when there are no changes, then .borderedProminent when there are. What's the best way to do this? 👇 Reminders on iOS 26 Calendar on iOS 26
Topic: UI Frameworks SubTopic: SwiftUI Tags:
Aug ’25
Reply to Verifying braille output in an iOS app without a physical braille device?
@Systems Engineer, I'm willing to drop back to UIKit if it solved the VoiceOver/braille display issues. Any pointers to an example UIKit implementation of AXMathExpressionProvider? There’s not much to go on in that doc or its related topics. I even tried deep-research mode in both Gemini and Claude Opus. Gemini flat-out gave up, while Claude surfaced this after reviewing 297 sources: The AXMathExpressionProvider protocol does not exist in the current iOS/SwiftUI accessibility APIs. After extensive research across Apple’s documentation, developer forums, GitHub repos, and WWDC sessions, there’s no evidence this protocol exists in the current iOS SDK. It may be hypothetical, planned for the future, or confused with other accessibility APIs.
Jul ’25
Reply to Verifying braille output in an iOS app without a physical braille device?
[Since I haven’t heard back, I’m re-posting my comment as a thread reply in case it got overlooked—comments can be easy to miss in this forum.] @Systems Engineer, thanks for the reply! Any pointers to a sample implementation of AXMathExpressionProvider? That doc is pretty thin and doesn't show examples…I learn best through examples! GitHub searches haven't turned up anything useful either. :( Also, my app is a SwiftUI iOS app—can I implement this with SwiftUI alone, or will I need UIKit?
Jul ’25
Reply to Verifying braille output in an iOS app without a physical braille device?
After some digging (and banging my head against the wall), I narrowed things down to two core issues. I’ve posted them as new topics since this thread title no longer fits and I can't update it. How to force VoiceOver to read decimal point even when there are 6 or more decimal digits? Programmatically force VoiceOver to read parentheses for math expressions
Jun ’25
Reply to VoiceOver and currency - high amounts
A similar thing happens with six or more decimal digits. For example: Text("0.12345") -> "zero point one two three four five" But this: Text("0.123456") -> "zero one, two, three, four, five, six" (commas represent pauses) How can I force VoiceOver to announce the decimal separator ("point") and not insert pauses regardless of the number of decimal digits?
Jun ’25
Reply to Verifying braille output in an iOS app without a physical braille device?
The only workaround I could find requires people to create a custom punctuation group that includes only mathematical symbols, then manually switch to it when using my app. This feels like a significant burden and seems at odds with providing a seamless experience. This highlights what feels like a gap in the accessibility API: no way for developers to precisely control VoiceOver speech for technical content (pronounce specific symbols but ensure natural number reading) while simultaneously ensuring literal display on Braille devices. I'm hoping an Apple accessibility engineer or experienced developer might know a better approach than requiring users to modify system-level settings for one app.
Jun ’25
Reply to .disabled() doesn't VISUALLY disable buttons inside ToolbarItem on iOS 26 devices
It looks like it does have to do with how the button's label is declared. Here's my post about another bug where a button's hit target shrinks based on its label declaration: SwiftUI Button with Image view label has smaller hit target So if I change this sample code to use a label: closure with a Label() view, the button does appear gray when disabled. Interestingly though, it still responds to taps with a bounce animation, even though the action isn’t triggered. That’s still inconsistent with how disabled buttons behave outside of a toolbar. Also, the button grows slightly wider when disabled. Code var body: some View { NavigationStack { VStack { Button{ print("Body button tapped") } label: { Label("Body Button", systemImage: "checkmark") } .labelStyle(.titleOnly) .buttonStyle(.borderedProminent) .disabled(isButtonDisabled) Toggle("Disable buttons", isOn: $isButtonDisabled) Spacer() } .padding() .navigationTitle("Device: \(osTitle)") .navigationBarTitleDisplayMode(.large) .toolbar { ToolbarItem { Button { print("Toolbar button tapped") } label: { Label("Toolbar", systemImage: "checkmark") } .labelStyle(.titleOnly) .buttonStyle(.borderedProminent) .disabled(isButtonDisabled) } } } }
Topic: UI Frameworks SubTopic: SwiftUI Tags:
Replies
Boosts
Views
Activity
Oct ’25
Reply to Custom SF Symbols with badges not vertically centered in SwiftUI buttons
As a workaround, I'm temporarily using ellipsis.circle.badge: But this isn't the recommended More icon anymore. Apple now suggests the standard ellipsis for "More": The problem is, there’s no badged version—so I need a custom "combined" symbol that stays vertically centered, with or without the badge.
Topic: UI Frameworks SubTopic: SwiftUI Tags:
Replies
Boosts
Views
Activity
Sep ’25
Reply to Implicit list row animations broken in Form container on iOS 26 beta 3
Looks like it's still fixed in iOS 26 Dev Beta 5/Public Beta 2 (23A5308g). Hopefully it stays that way. I’ll mark my last update as the answer.
Topic: UI Frameworks SubTopic: SwiftUI Tags:
Replies
Boosts
Views
Activity
Aug ’25
Reply to .disabled() doesn't VISUALLY disable buttons inside ToolbarItem on iOS 26 devices
Thanks for the reply. Even with that button declaration, it still won't work when the label: closure contains a Text() element like this: Code Button { print("Checkmark button tapped") } label: { Text("Checkmark") } .buttonStyle(.borderedProminent) .disabled(isButtonDisabled) Recording As I mentioned in my original post, I already filed this as FB19313064. But I’ll update the report to clarify that it only affects buttons that don’t use the label: closure with a Label() element.
Topic: UI Frameworks SubTopic: SwiftUI Tags:
Replies
Boosts
Views
Activity
Aug ’25
Reply to .disabled() doesn't VISUALLY disable buttons inside ToolbarItem on iOS 26 devices
Changing to .plain, does make make the .disabled() modifier work on an iOS 26 device (toolbar button visually becomes "grayed out"): But I’m trying to match the behavior of stock iOS 26 apps like Reminders and Calendar, where the checkmark/save button is disabled when there are no changes, then .borderedProminent when there are. What's the best way to do this? 👇 Reminders on iOS 26 Calendar on iOS 26
Topic: UI Frameworks SubTopic: SwiftUI Tags:
Replies
Boosts
Views
Activity
Aug ’25
Reply to Implicit list row animations broken in Form container on iOS 26 beta 3
Looks like this is fixed—the animation now works as expected in iOS 26.0 Dev Beta 4 (23A5297i) and Public Beta 1 (23A5297m). I’ll wait for the next set of betas before calling it fully solved, but so far it's promising.
Topic: UI Frameworks SubTopic: SwiftUI Tags:
Replies
Boosts
Views
Activity
Jul ’25
Reply to Xcode 26.0 beta 3: Clicking current branch in Source Control navigator doesn't show commit history
This appears to be fixed in Xcode 26.0 beta 4 (17A5285i).
Replies
Boosts
Views
Activity
Jul ’25
Reply to Programmatically force VoiceOver to read parentheses for math expressions
✅ Submitted FB18909853.
Replies
Boosts
Views
Activity
Jul ’25
Reply to Implicit list row animations broken in Form container on iOS 26 beta 3
Animated GIF showing the issue. iOS 18.5 sim on the left, iOS 26.0 beta 3 on the right. [Sorry for the choppiness—can't upload a proper video.]
Topic: UI Frameworks SubTopic: SwiftUI Tags:
Replies
Boosts
Views
Activity
Jul ’25
Reply to Verifying braille output in an iOS app without a physical braille device?
@Systems Engineer, I'm willing to drop back to UIKit if it solved the VoiceOver/braille display issues. Any pointers to an example UIKit implementation of AXMathExpressionProvider? There’s not much to go on in that doc or its related topics. I even tried deep-research mode in both Gemini and Claude Opus. Gemini flat-out gave up, while Claude surfaced this after reviewing 297 sources: The AXMathExpressionProvider protocol does not exist in the current iOS/SwiftUI accessibility APIs. After extensive research across Apple’s documentation, developer forums, GitHub repos, and WWDC sessions, there’s no evidence this protocol exists in the current iOS SDK. It may be hypothetical, planned for the future, or confused with other accessibility APIs.
Replies
Boosts
Views
Activity
Jul ’25
Reply to Verifying braille output in an iOS app without a physical braille device?
[Since I haven’t heard back, I’m re-posting my comment as a thread reply in case it got overlooked—comments can be easy to miss in this forum.] @Systems Engineer, thanks for the reply! Any pointers to a sample implementation of AXMathExpressionProvider? That doc is pretty thin and doesn't show examples…I learn best through examples! GitHub searches haven't turned up anything useful either. :( Also, my app is a SwiftUI iOS app—can I implement this with SwiftUI alone, or will I need UIKit?
Replies
Boosts
Views
Activity
Jul ’25
Reply to Verifying braille output in an iOS app without a physical braille device?
After some digging (and banging my head against the wall), I narrowed things down to two core issues. I’ve posted them as new topics since this thread title no longer fits and I can't update it. How to force VoiceOver to read decimal point even when there are 6 or more decimal digits? Programmatically force VoiceOver to read parentheses for math expressions
Replies
Boosts
Views
Activity
Jun ’25
Reply to How to force VoiceOver to read decimal point even when there are 6 or more decimal digits?
Also submitted as FB18513949.
Replies
Boosts
Views
Activity
Jun ’25
Reply to VoiceOver and currency - high amounts
A similar thing happens with six or more decimal digits. For example: Text("0.12345") -> "zero point one two three four five" But this: Text("0.123456") -> "zero one, two, three, four, five, six" (commas represent pauses) How can I force VoiceOver to announce the decimal separator ("point") and not insert pauses regardless of the number of decimal digits?
Replies
Boosts
Views
Activity
Jun ’25
Reply to Verifying braille output in an iOS app without a physical braille device?
The only workaround I could find requires people to create a custom punctuation group that includes only mathematical symbols, then manually switch to it when using my app. This feels like a significant burden and seems at odds with providing a seamless experience. This highlights what feels like a gap in the accessibility API: no way for developers to precisely control VoiceOver speech for technical content (pronounce specific symbols but ensure natural number reading) while simultaneously ensuring literal display on Braille devices. I'm hoping an Apple accessibility engineer or experienced developer might know a better approach than requiring users to modify system-level settings for one app.
Replies
Boosts
Views
Activity
Jun ’25