Explore the various UI frameworks available for building app interfaces. Discuss the use cases for different frameworks, share best practices, and get help with specific framework-related questions.

All subtopics
Posts under UI Frameworks topic

Post

Replies

Boosts

Views

Activity

How does Appintent independently display icons
There are hundreds of functions in my project that require creating shortcuts, but AppShortcutsProvider only supports up to 10 AppShortcut declarations, so I used over 100 AppIntents for users to manually add shortcuts (I did not add them to AppShortcutsProvider); The problem now is that I hope all the AppIntents I declare have specific names and function icons. I have tried my best to configure AppIntents with the query document, but the default display in the shortcut app is the icon of this application instead of the function icon I set. My code is as follows: struct ResizeImageIntent: AppIntent { static var title: LocalizedStringResource = "修改图片尺寸" static var description: IntentDescription = IntentDescription("快速打开修改图片尺寸功能") static var openAppWhenRun: Bool = true func perform() async throws -> some IntentResult { if let url = URL(string: "toolbox://resizeimage") { await UIApplication.shared.open(url) } return .result() } } The following is the code with icon configuration added: struct VideoParseIntent: AppIntent { static var title: LocalizedStringResource = "万能解析" static var description: IntentDescription = IntentDescription("快速打开万能解析功能") static var openAppWhenRun: Bool = true // 修正:返回AppShortcut数组 static var appShortcuts: [AppShortcut] { [ AppShortcut( intent: VideoParseIntent(), phrases: ["使用万能解析"], systemImageName: "play.rectangle.on.rectangle" // 系统内置图标 ) ] } func perform() async throws -> some IntentResult { if let url = URL(string: "toolbox://videoparse") { await UIApplication.shared.open(url) } return .result() } }
Topic: UI Frameworks SubTopic: SwiftUI
1
0
132
Jun ’25
iOS 26 - Touch in context menu preview not working anymore
Hello, I am testing an existing app on iOS 26. It hast an UITableViewController that shows a custom context menu preview using previewForHighlightingContextMenuWithConfiguration and providing an UITargetedPreview. Something along the lines like this (shortened): public override func tableView(_ tableView: UITableView, previewForHighlightingContextMenuWithConfiguration configuration: UIContextMenuConfiguration) -> UITargetedPreview? { guard let indexPath = configuration.identifier as? NSIndexPath else { return nil } let previewTableViewCell = self.getCell(for: indexPath) var cellHeight = self.getCellHeight(for: indexPath, with: maxTextWidth) // Use the contentView of the UITableViewCell as a preview view let previewMessageView = previewTableViewCell.contentView previewMessageView.frame = CGRect(x: 0, y: 0, width: maxPreviewWidth, height: cellHeight) previewMessageView.layer.masksToBounds = true let accessoryView = ... let totalAccessoryFrameHeight = accessoryView.frame.maxY - cellHeight var containerView = UIView(frame: .init(x: 0, y: 0, width: Int(maxPreviewWidth), height: Int(cellHeight + totalAccessoryFrameHeight))) containerView.backgroundColor = .clear containerView.addSubview(previewMessageView) containerView.addSubview(accessoryView) // Create a preview target which allows us to have a transparent background let previewTarget = UIPreviewTarget(container: tableView, center: ...) let previewParameter = UIPreviewParameters() // Remove the background and the drop shadow from our custom preview view previewParameter.backgroundColor = .clear previewParameter.shadowPath = UIBezierPath() return UITargetedPreview(view: containerView, parameters: previewParameter, target: previewTarget) } On iOS 18 and below this works fine and buttons that are included in the accessoryView are tapable by the user. Now on iOS 26 the preview is shown correct (although it has a bit weird shadow animation), but tapping a button of the accessoryView now closes the context menu, without triggering the touchUpInside event anymore. For me it feels like an unintended change in behavior, but maybe I am missing something? Filed FB18644353
0
0
421
Jul ’25
App Name Display
For now, my app name length is more than 20 characters, so the iPhone app name displays without a space, and uses the range operator to ensure showing the rest in the next line. Is it possible to show space and name with 2 lines?
Topic: UI Frameworks SubTopic: General Tags:
0
0
95
May ’25
Hide title bar in Xcode preview (macOS)
I am trying to hide the titlebar for a macOS app and despite searching throughout the entire day, there's nothing that points to how I can achieve this. I did find this page in the documentation but I don't understand it. https://developer.apple.com/documentation/uikit/uititlebar/titlevisibility How do I remove the part where it says Xcode Previews? I have used the following on my WindowGroup that works perfectly when the app is being run but it doesn't do anything in the preview. .windowStyle(.hiddenTitleBar)
Topic: UI Frameworks SubTopic: SwiftUI
0
0
81
Jun ’25
Popover, Menu and Sheet not working with RealityView Attachment SwiftUI
Hi, I have a SwiftUI View, that is attached to a 3D object in Reality View. This is supposed to be a HUD for the user to select a few things. I wanted a sub menu for one of the top level buttons. But looks like none of the reasonable choices like Menu, Sheet or Popover work. Is there a known limitation of RealityKit Views where full SwiftUI cannot be used? Or am I doing something wrong? For example, Button { SLogger.info("Toggled") withAnimation { showHudPositionMenu.toggle() } } label: { HStack { Image(systemName: "rectangle.3.group") Text("My Button") } } .popover(isPresented: $showHudPositionMenu, attachmentAnchor: attachmentAnchor) { HudPositionMenuItems(showHudPositionMenu: $showHudPositionMenu, currentHudPosition: $currentHudPosition) } This will print "Toggled" but will not display the MenuItems Popover. If it makes any difference, this is attached to a child of a head tracked entity.
1
0
131
Jun ’25
Cursor position sync between IOS touch screen and app textview.
The app puts button values into a text view area and controls the cursor. Upon an IOS touch screen, cut or paste, the IOS cursor loses sync with the app cursor causing an address out of bounds and fails. The IOS cut or paste changes the cursor position and the text.endIndex address by shrinking or expanding the text field. IOS doesn't know about the app cursorPosition. If IOS could update the app cursor position and the text.endIndex position would solve the problem. Or if the app knew about the IOS change could update the app cursor position and the text.endIndex. The current work around is the user sets the cursor to the text.startIndex using an app navigating button before the touch screen. The app does not fail. The user then navigates the cursor using arrow buttons to another position. To see this happen download the free SummaGramIPAD Trial.(13") TSIs have been requested with engineer suggestions for well over one year. I hope someone could figure this out. I just finished SummaGram iPhone and would like to host it. Thanks for your help. Charlie
0
0
138
Jul ’25
Recently used applications on guardian phone - FamilyControls, DeviceActivityReport
For an iOS app that runs in both child and parent mode across iOS devices. On the child device, with Family Controls enabled using .child permissions via AuthorizationCenter.requestAuthorization(for: .child). Is any way to display a list of recently used apps by the child on the parent (guardian) device, in a privacy-preserving and Apple-compliant way?
1
0
182
May ’25
iOS Battery Percentage Granularity Issue
When developing an iOS app that monitors or transmits the battery percentage (using UIDevice.current.batteryLevel), often expect to get updates for every 1% change in battery. However, on iOS, the batteryLevel property only updates in steps of approximately 5%. For example, the value jumps from 1.0 (100%) to 0.95 (95%), then to 0.90 (90%), and so on. It does not report intermediate values like 0.99, 0.98, etc.
3
0
314
Jun ’25
FocusedBinding and selecting item in the List issue
Hello dear community! I'm still new to SwiftUI and going through the official Introducing SwiftUI Tutorials (basically, building the Landmarks app) And I'm struggle with some behavior I noticed in the macOS version of the Landmarks app. So, here is the idea, there is a list of Landmarks (the simplified version from the tutorial): struct LandmarkList: View { @Environment(ModelData.self) var modelData @State private var selectedLandmark: Landmark? var index: Int? { modelData.landmarks.firstIndex(where: { $0.id == selectedLandmark?.id }) } var body: some View { @Bindable var modelData = modelData NavigationSplitView { List(selection: $selectedLandmark) { ForEach(modelData.landmarks) { landmark in NavigationLink { LandmarkDetail(landmark: landmark) } label: { LandmarkRow(landmark: landmark) } .tag(landmark) } } .navigationTitle("Landmarks") .frame(minWidth: 300) } detail: { Text("Select a landmark") } .focusedValue(\.selectedLandmark, $modelData.landmarks[index ?? 0]) } } And there are a few helper structs which makes the possibility of the Marking a selected landmark as favorite (or remove) via shortcut and via menu: struct LandmarkCommands: Commands { @FocusedBinding(\.selectedLandmark) var selectedLandmark var body: some Commands { SidebarCommands() CommandMenu("Landmark") { Button("\(selectedLandmark?.isFavorite == true ? "Remove" : "Mark") as Favorite") { selectedLandmark?.isFavorite.toggle() } .keyboardShortcut("f", modifiers: [.shift, .option]) .disabled(selectedLandmark == nil) } } } private struct SelectedLandmarkKey: FocusedValueKey { typealias Value = Binding<Landmark> } extension FocusedValues { var selectedLandmark: Binding<Landmark>? { get { self[SelectedLandmarkKey.self] } set { self[SelectedLandmarkKey.self] = newValue } } } So, with this setup which is presented in the tutorial I notice 3 issues: On the first launch of the app, if I try to select a landmark — it's get unselected instantly. It I try to select it again — it works Marking a selected Landmark as favorite via shortcut (f+shift+opt) or via menu makes the selected Landmark unselected On the Landmark details — marking a Landmark as Favorite also makes the landmark unselected. You can check it on your own if you download the completed project from this page: https://developer.apple.com/tutorials/swiftui/creating-a-macos-app But could someone please explain why it's happening? And how to avoid such a bad UX with unselecting items in the list?
Topic: UI Frameworks SubTopic: SwiftUI Tags:
1
0
265
Jul ’25
Child Views and ViewThatFits
I'd like to support different template views within a ViewThatFits for items within a list, allowing the list to optimize its layout for different devices. Within the child views is a Text view that is bound to the name of an item. I'd rather the Text view simply truncate the text as necessary although it instead is influencing which view is chosen by ViewThatFits. I'd also rather not artificially set the maxWidth of the Text view as it artificially limits the width on devices where it's not necessary (e.g. iPad Pro vs. iPad mini or iPhone). Any guidance or suggestions on how this can be accomplished as it looks very odd for the layout of one row in the list to be quite different than the rest of the rows.
0
0
84
Jun ’25
Tipkit for VisionOS (TabView, etc.)
I am trying to create a user flow where I can guide the user how to navigate through my app. I want to add a tip on a TabView that indicates user to navigate to a specific tab. I have seen this work with iOS properly but I am a little lost as VisionOS is not responding the same for .popoverTip etc. Any guidance is appreciated!
0
0
225
Jul ’25
Detect when tab bar minimizes (.tabBarMinimizeBehavior)
Hi! I'm working on a iOS 26 SwiftUI prototype that adds an element to the content of a screen only when the tab bar is fully visible and not minimized (via .tabBarMinimizeBehavior). Is there any way to detect when a tab bar is minimized? My hope is that I can use a ternary operator to display something only when a boolean is true. Here's some code to illustrate my idea: struct ContentView: View { @State var isTabBarMinimized: Bool = false var body: some View { TabView { Tab("View1", systemImage: "rainbow") { // Only appears when tab bar is fully visible Color.blue .opacity(isTabBarMinimized? 0 : 1 ) } Tab("View2", systemImage: "rainbow") { View2() } Tab("View3", systemImage: "rainbow") { View3() } Tab("View4", systemImage: "rainbow") { View4() } } .tabBarMinimizeBehavior(.onScrollDown) } }
1
0
239
Jun ’25
toolbarForegroundStyle has no effect on navigation title
On Apple Watch, I have used toolbarForegroundStyle view modifier to change the color of the navigation title programmatically to offer theming support for users. In watchOS 26 it no longer seem to have any effect. For example with .toolbarForegroundStyle(.blue, for: .navigationBar) the title color still uses the AccentColor from the Assets catalog. Is there any other setup required to get this working, or is it a bug? Filed a feedback FB18527395
2
0
169
Jul ’25
Crash when minimizing on external display and unplugging it (iOS App on Mac)
Our iOS app, when running as an iOS App on Mac, crashes consistently under the following scenario: 1. Launch the app on an external display. 2. Minimize the app window. 3. Disconnect the external display. The app crashes every time under these conditions. The crash log shows the following call stack: *** Assertion failure in -[UINSWorkspace _maximumContentSizeForWindowOnScreen:], UINSWorkspace.m:401 -[UINSWorkspace _maximumContentSizeForWindowOnScreen:]: screen parameter should not be nil ( 0 CoreFoundation 0x000000018e841df0 __exceptionPreprocess + 176 1 libobjc.A.dylib 0x000000018e306b60 objc_exception_throw + 88 2 Foundation 0x000000018fb6aa78 -[NSCalendarDate initWithCoder:] + 0 3 UIKitMacHelper 0x00000001a9a59110 -[UINSWorkspace _maximumContentSizeForWindowOnScreen:] + 184 4 UIKitMacHelper 0x00000001a9a3e748 -[UINSSceneViewController _usableScreenSizeWithSceneSize:shouldOverride:] + 412 5 UIKitMacHelper 0x00000001a9a3d55c -[UINSSceneViewController _effectiveScaleFactorForLayoutWithOverride:] + 88 6 UIKitMacHelper 0x00000001a9a3f3a8 -[UINSSceneViewController _updateZoomFactors] + 28 7 UIKitMacHelper 0x00000001a9a3f248 -[UINSSceneViewController _updateZoomFactorsAndDoLayout] + 24 8 UIKitMacHelper 0x00000001a9a3df80 -[UINSSceneViewController _doUpdates:] + 104 9 UIKitMacHelper 0x00000001a99ad460 -[UINSSceneViewController observeValueForKeyPath:ofObject:change:context:] + 176 10 Foundation 0x000000018facb0d8 -[NSKeyValueObservance observeValueForKeyPath:ofObject:change:context:] + 388 11 Foundation 0x000000018facb0d8 -[NSKeyValueObservance observeValueForKeyPath:ofObject:change:context:] + 388 12 Foundation 0x000000018fa8f7b4 NSKeyValueNotifyObserver + 252 13 Foundation 0x000000018fb3c560 NSKeyValueDidChange + 388 14 Foundation 0x00000001903149a0 NSKeyValueDidChangeWithPerThreadPendingNotifications + 160 15 AppKit 0x00000001924673d4 -[NSThemeFrame _didChangeContentLayoutRect] + 76 16 AppKit 0x000000019246521c -[NSWindow _oldPlaceWindow:fromServer:] + 744 ) It seems like the system attempts to access a screen object that is already nil after the external monitor is removed. This leads to an assertion failure in UINSWorkspace. Is there any known workaround or update planned to address this issue? Thank you.
2
0
250
May ’25
ARQuickLook controls not displaying in SwiftUI
Hi, I'm embedding the QLPreviewController in a UIViewControllerRepresentable. When I view .usdz models I don't see the AR/Object selector at the top, nor the sharing button. I have tried presenting modally with a .sheet modifier and had the same result. What do I need to do to get the controls? Thanks, code attached. Code Spiff
3
0
1.9k
May ’25
Toolbar in dark mode how to avoid or remove the black background?
How to remove the black background for both navigation bar and tab bar when scrolling. When in light mode, it looks fine.
Replies
1
Boosts
0
Views
151
Activity
Jul ’25
How does Appintent independently display icons
There are hundreds of functions in my project that require creating shortcuts, but AppShortcutsProvider only supports up to 10 AppShortcut declarations, so I used over 100 AppIntents for users to manually add shortcuts (I did not add them to AppShortcutsProvider); The problem now is that I hope all the AppIntents I declare have specific names and function icons. I have tried my best to configure AppIntents with the query document, but the default display in the shortcut app is the icon of this application instead of the function icon I set. My code is as follows: struct ResizeImageIntent: AppIntent { static var title: LocalizedStringResource = "修改图片尺寸" static var description: IntentDescription = IntentDescription("快速打开修改图片尺寸功能") static var openAppWhenRun: Bool = true func perform() async throws -> some IntentResult { if let url = URL(string: "toolbox://resizeimage") { await UIApplication.shared.open(url) } return .result() } } The following is the code with icon configuration added: struct VideoParseIntent: AppIntent { static var title: LocalizedStringResource = "万能解析" static var description: IntentDescription = IntentDescription("快速打开万能解析功能") static var openAppWhenRun: Bool = true // 修正:返回AppShortcut数组 static var appShortcuts: [AppShortcut] { [ AppShortcut( intent: VideoParseIntent(), phrases: ["使用万能解析"], systemImageName: "play.rectangle.on.rectangle" // 系统内置图标 ) ] } func perform() async throws -> some IntentResult { if let url = URL(string: "toolbox://videoparse") { await UIApplication.shared.open(url) } return .result() } }
Topic: UI Frameworks SubTopic: SwiftUI
Replies
1
Boosts
0
Views
132
Activity
Jun ’25
Can the macOS Quick Look preview plugin support network capabilities?
I developed a quick look preview plugin on MacOS, and want to add some data tracking to understand user usage. However, I'm encountering errors when using network capabilities within the plugin. I want to confirm whether the preview plugin blocks network capabilities.
Replies
0
Boosts
0
Views
84
Activity
May ’25
applicationWillEnterForeground not getting called
Something func applicationWillEnterForeground is not getting called for specific iOS 18.3.2
Topic: UI Frameworks SubTopic: UIKit
Replies
0
Boosts
0
Views
61
Activity
May ’25
iOS 26 - Touch in context menu preview not working anymore
Hello, I am testing an existing app on iOS 26. It hast an UITableViewController that shows a custom context menu preview using previewForHighlightingContextMenuWithConfiguration and providing an UITargetedPreview. Something along the lines like this (shortened): public override func tableView(_ tableView: UITableView, previewForHighlightingContextMenuWithConfiguration configuration: UIContextMenuConfiguration) -> UITargetedPreview? { guard let indexPath = configuration.identifier as? NSIndexPath else { return nil } let previewTableViewCell = self.getCell(for: indexPath) var cellHeight = self.getCellHeight(for: indexPath, with: maxTextWidth) // Use the contentView of the UITableViewCell as a preview view let previewMessageView = previewTableViewCell.contentView previewMessageView.frame = CGRect(x: 0, y: 0, width: maxPreviewWidth, height: cellHeight) previewMessageView.layer.masksToBounds = true let accessoryView = ... let totalAccessoryFrameHeight = accessoryView.frame.maxY - cellHeight var containerView = UIView(frame: .init(x: 0, y: 0, width: Int(maxPreviewWidth), height: Int(cellHeight + totalAccessoryFrameHeight))) containerView.backgroundColor = .clear containerView.addSubview(previewMessageView) containerView.addSubview(accessoryView) // Create a preview target which allows us to have a transparent background let previewTarget = UIPreviewTarget(container: tableView, center: ...) let previewParameter = UIPreviewParameters() // Remove the background and the drop shadow from our custom preview view previewParameter.backgroundColor = .clear previewParameter.shadowPath = UIBezierPath() return UITargetedPreview(view: containerView, parameters: previewParameter, target: previewTarget) } On iOS 18 and below this works fine and buttons that are included in the accessoryView are tapable by the user. Now on iOS 26 the preview is shown correct (although it has a bit weird shadow animation), but tapping a button of the accessoryView now closes the context menu, without triggering the touchUpInside event anymore. For me it feels like an unintended change in behavior, but maybe I am missing something? Filed FB18644353
Replies
0
Boosts
0
Views
421
Activity
Jul ’25
App Name Display
For now, my app name length is more than 20 characters, so the iPhone app name displays without a space, and uses the range operator to ensure showing the rest in the next line. Is it possible to show space and name with 2 lines?
Topic: UI Frameworks SubTopic: General Tags:
Replies
0
Boosts
0
Views
95
Activity
May ’25
Hide title bar in Xcode preview (macOS)
I am trying to hide the titlebar for a macOS app and despite searching throughout the entire day, there's nothing that points to how I can achieve this. I did find this page in the documentation but I don't understand it. https://developer.apple.com/documentation/uikit/uititlebar/titlevisibility How do I remove the part where it says Xcode Previews? I have used the following on my WindowGroup that works perfectly when the app is being run but it doesn't do anything in the preview. .windowStyle(.hiddenTitleBar)
Topic: UI Frameworks SubTopic: SwiftUI
Replies
0
Boosts
0
Views
81
Activity
Jun ’25
Popover, Menu and Sheet not working with RealityView Attachment SwiftUI
Hi, I have a SwiftUI View, that is attached to a 3D object in Reality View. This is supposed to be a HUD for the user to select a few things. I wanted a sub menu for one of the top level buttons. But looks like none of the reasonable choices like Menu, Sheet or Popover work. Is there a known limitation of RealityKit Views where full SwiftUI cannot be used? Or am I doing something wrong? For example, Button { SLogger.info("Toggled") withAnimation { showHudPositionMenu.toggle() } } label: { HStack { Image(systemName: "rectangle.3.group") Text("My Button") } } .popover(isPresented: $showHudPositionMenu, attachmentAnchor: attachmentAnchor) { HudPositionMenuItems(showHudPositionMenu: $showHudPositionMenu, currentHudPosition: $currentHudPosition) } This will print "Toggled" but will not display the MenuItems Popover. If it makes any difference, this is attached to a child of a head tracked entity.
Replies
1
Boosts
0
Views
131
Activity
Jun ’25
Cursor position sync between IOS touch screen and app textview.
The app puts button values into a text view area and controls the cursor. Upon an IOS touch screen, cut or paste, the IOS cursor loses sync with the app cursor causing an address out of bounds and fails. The IOS cut or paste changes the cursor position and the text.endIndex address by shrinking or expanding the text field. IOS doesn't know about the app cursorPosition. If IOS could update the app cursor position and the text.endIndex position would solve the problem. Or if the app knew about the IOS change could update the app cursor position and the text.endIndex. The current work around is the user sets the cursor to the text.startIndex using an app navigating button before the touch screen. The app does not fail. The user then navigates the cursor using arrow buttons to another position. To see this happen download the free SummaGramIPAD Trial.(13") TSIs have been requested with engineer suggestions for well over one year. I hope someone could figure this out. I just finished SummaGram iPhone and would like to host it. Thanks for your help. Charlie
Replies
0
Boosts
0
Views
138
Activity
Jul ’25
Recently used applications on guardian phone - FamilyControls, DeviceActivityReport
For an iOS app that runs in both child and parent mode across iOS devices. On the child device, with Family Controls enabled using .child permissions via AuthorizationCenter.requestAuthorization(for: .child). Is any way to display a list of recently used apps by the child on the parent (guardian) device, in a privacy-preserving and Apple-compliant way?
Replies
1
Boosts
0
Views
182
Activity
May ’25
iOS Battery Percentage Granularity Issue
When developing an iOS app that monitors or transmits the battery percentage (using UIDevice.current.batteryLevel), often expect to get updates for every 1% change in battery. However, on iOS, the batteryLevel property only updates in steps of approximately 5%. For example, the value jumps from 1.0 (100%) to 0.95 (95%), then to 0.90 (90%), and so on. It does not report intermediate values like 0.99, 0.98, etc.
Replies
3
Boosts
0
Views
314
Activity
Jun ’25
Color of Outline Disclosure List Carets in visionOS SwiftUI View
Can I adjust the color properties of disclosure carets in an Outline Disclosure List view (with NavigationLinks for the list entries) in visionOS? I have color for these carets using .foregroundStyle(.accent) and it works, however, I want to change the “brightness” of those accented color carets.
Replies
1
Boosts
0
Views
67
Activity
Jun ’25
FocusedBinding and selecting item in the List issue
Hello dear community! I'm still new to SwiftUI and going through the official Introducing SwiftUI Tutorials (basically, building the Landmarks app) And I'm struggle with some behavior I noticed in the macOS version of the Landmarks app. So, here is the idea, there is a list of Landmarks (the simplified version from the tutorial): struct LandmarkList: View { @Environment(ModelData.self) var modelData @State private var selectedLandmark: Landmark? var index: Int? { modelData.landmarks.firstIndex(where: { $0.id == selectedLandmark?.id }) } var body: some View { @Bindable var modelData = modelData NavigationSplitView { List(selection: $selectedLandmark) { ForEach(modelData.landmarks) { landmark in NavigationLink { LandmarkDetail(landmark: landmark) } label: { LandmarkRow(landmark: landmark) } .tag(landmark) } } .navigationTitle("Landmarks") .frame(minWidth: 300) } detail: { Text("Select a landmark") } .focusedValue(\.selectedLandmark, $modelData.landmarks[index ?? 0]) } } And there are a few helper structs which makes the possibility of the Marking a selected landmark as favorite (or remove) via shortcut and via menu: struct LandmarkCommands: Commands { @FocusedBinding(\.selectedLandmark) var selectedLandmark var body: some Commands { SidebarCommands() CommandMenu("Landmark") { Button("\(selectedLandmark?.isFavorite == true ? "Remove" : "Mark") as Favorite") { selectedLandmark?.isFavorite.toggle() } .keyboardShortcut("f", modifiers: [.shift, .option]) .disabled(selectedLandmark == nil) } } } private struct SelectedLandmarkKey: FocusedValueKey { typealias Value = Binding<Landmark> } extension FocusedValues { var selectedLandmark: Binding<Landmark>? { get { self[SelectedLandmarkKey.self] } set { self[SelectedLandmarkKey.self] = newValue } } } So, with this setup which is presented in the tutorial I notice 3 issues: On the first launch of the app, if I try to select a landmark — it's get unselected instantly. It I try to select it again — it works Marking a selected Landmark as favorite via shortcut (f+shift+opt) or via menu makes the selected Landmark unselected On the Landmark details — marking a Landmark as Favorite also makes the landmark unselected. You can check it on your own if you download the completed project from this page: https://developer.apple.com/tutorials/swiftui/creating-a-macos-app But could someone please explain why it's happening? And how to avoid such a bad UX with unselecting items in the list?
Topic: UI Frameworks SubTopic: SwiftUI Tags:
Replies
1
Boosts
0
Views
265
Activity
Jul ’25
Child Views and ViewThatFits
I'd like to support different template views within a ViewThatFits for items within a list, allowing the list to optimize its layout for different devices. Within the child views is a Text view that is bound to the name of an item. I'd rather the Text view simply truncate the text as necessary although it instead is influencing which view is chosen by ViewThatFits. I'd also rather not artificially set the maxWidth of the Text view as it artificially limits the width on devices where it's not necessary (e.g. iPad Pro vs. iPad mini or iPhone). Any guidance or suggestions on how this can be accomplished as it looks very odd for the layout of one row in the list to be quite different than the rest of the rows.
Replies
0
Boosts
0
Views
84
Activity
Jun ’25
Tipkit for VisionOS (TabView, etc.)
I am trying to create a user flow where I can guide the user how to navigate through my app. I want to add a tip on a TabView that indicates user to navigate to a specific tab. I have seen this work with iOS properly but I am a little lost as VisionOS is not responding the same for .popoverTip etc. Any guidance is appreciated!
Replies
0
Boosts
0
Views
225
Activity
Jul ’25
Detect when tab bar minimizes (.tabBarMinimizeBehavior)
Hi! I'm working on a iOS 26 SwiftUI prototype that adds an element to the content of a screen only when the tab bar is fully visible and not minimized (via .tabBarMinimizeBehavior). Is there any way to detect when a tab bar is minimized? My hope is that I can use a ternary operator to display something only when a boolean is true. Here's some code to illustrate my idea: struct ContentView: View { @State var isTabBarMinimized: Bool = false var body: some View { TabView { Tab("View1", systemImage: "rainbow") { // Only appears when tab bar is fully visible Color.blue .opacity(isTabBarMinimized? 0 : 1 ) } Tab("View2", systemImage: "rainbow") { View2() } Tab("View3", systemImage: "rainbow") { View3() } Tab("View4", systemImage: "rainbow") { View4() } } .tabBarMinimizeBehavior(.onScrollDown) } }
Replies
1
Boosts
0
Views
239
Activity
Jun ’25
toolbarForegroundStyle has no effect on navigation title
On Apple Watch, I have used toolbarForegroundStyle view modifier to change the color of the navigation title programmatically to offer theming support for users. In watchOS 26 it no longer seem to have any effect. For example with .toolbarForegroundStyle(.blue, for: .navigationBar) the title color still uses the AccentColor from the Assets catalog. Is there any other setup required to get this working, or is it a bug? Filed a feedback FB18527395
Replies
2
Boosts
0
Views
169
Activity
Jul ’25
Crash when minimizing on external display and unplugging it (iOS App on Mac)
Our iOS app, when running as an iOS App on Mac, crashes consistently under the following scenario: 1. Launch the app on an external display. 2. Minimize the app window. 3. Disconnect the external display. The app crashes every time under these conditions. The crash log shows the following call stack: *** Assertion failure in -[UINSWorkspace _maximumContentSizeForWindowOnScreen:], UINSWorkspace.m:401 -[UINSWorkspace _maximumContentSizeForWindowOnScreen:]: screen parameter should not be nil ( 0 CoreFoundation 0x000000018e841df0 __exceptionPreprocess + 176 1 libobjc.A.dylib 0x000000018e306b60 objc_exception_throw + 88 2 Foundation 0x000000018fb6aa78 -[NSCalendarDate initWithCoder:] + 0 3 UIKitMacHelper 0x00000001a9a59110 -[UINSWorkspace _maximumContentSizeForWindowOnScreen:] + 184 4 UIKitMacHelper 0x00000001a9a3e748 -[UINSSceneViewController _usableScreenSizeWithSceneSize:shouldOverride:] + 412 5 UIKitMacHelper 0x00000001a9a3d55c -[UINSSceneViewController _effectiveScaleFactorForLayoutWithOverride:] + 88 6 UIKitMacHelper 0x00000001a9a3f3a8 -[UINSSceneViewController _updateZoomFactors] + 28 7 UIKitMacHelper 0x00000001a9a3f248 -[UINSSceneViewController _updateZoomFactorsAndDoLayout] + 24 8 UIKitMacHelper 0x00000001a9a3df80 -[UINSSceneViewController _doUpdates:] + 104 9 UIKitMacHelper 0x00000001a99ad460 -[UINSSceneViewController observeValueForKeyPath:ofObject:change:context:] + 176 10 Foundation 0x000000018facb0d8 -[NSKeyValueObservance observeValueForKeyPath:ofObject:change:context:] + 388 11 Foundation 0x000000018facb0d8 -[NSKeyValueObservance observeValueForKeyPath:ofObject:change:context:] + 388 12 Foundation 0x000000018fa8f7b4 NSKeyValueNotifyObserver + 252 13 Foundation 0x000000018fb3c560 NSKeyValueDidChange + 388 14 Foundation 0x00000001903149a0 NSKeyValueDidChangeWithPerThreadPendingNotifications + 160 15 AppKit 0x00000001924673d4 -[NSThemeFrame _didChangeContentLayoutRect] + 76 16 AppKit 0x000000019246521c -[NSWindow _oldPlaceWindow:fromServer:] + 744 ) It seems like the system attempts to access a screen object that is already nil after the external monitor is removed. This leads to an assertion failure in UINSWorkspace. Is there any known workaround or update planned to address this issue? Thank you.
Replies
2
Boosts
0
Views
250
Activity
May ’25
ARQuickLook controls not displaying in SwiftUI
Hi, I'm embedding the QLPreviewController in a UIViewControllerRepresentable. When I view .usdz models I don't see the AR/Object selector at the top, nor the sharing button. I have tried presenting modally with a .sheet modifier and had the same result. What do I need to do to get the controls? Thanks, code attached. Code Spiff
Replies
3
Boosts
0
Views
1.9k
Activity
May ’25
Liquid glass toolbar: showing wrong light/dark on load
I have a dark background and the initial look of the nav bar is showing like there is a light background. See picture. Has anyone experienced this or know of a solution? If I scroll the table up, it will fix itself and start behaving as I'd expect.
Topic: UI Frameworks SubTopic: UIKit Tags:
Replies
2
Boosts
0
Views
117
Activity
Jun ’25