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

ssue with Session Sharing Between Safari and ASWebAuthenticationSession
We are experiencing an issue with session sharing on iOS and would appreciate your guidance. We operate and control our own OpenID Connect (OIDC) server. Our iOS application uses ASWebAuthenticationSession to authenticate users. We're unable to get the authentication session to be shared between the Safari app and the app's ASWebAuthenticationSession. This results in users having to re-authenticate despite being logged in via Safari. We've attempted various configurations related to cookie SameSite settings. These adjustments resolved the session sharing issue on Android using Chrome Custom Tabs. However, no changes we've tried have enabled session sharing to work as expected on iOS. According to documentation from Apple, Microsoft, Okta, and Auth0, session sharing between Safari and ASWebAuthenticationSession should work. Question: Are there any additional settings, configurations, or platform limitations we should be aware of that could impact session sharing on iOS? Where else can we look to resolve this issue?
Topic: UI Frameworks SubTopic: General
0
0
138
May ’25
Scrolling up in List after having quickly scrolled down becomes jumpy
There seems to be a bug; when scrolling very quickly down a List, and then scrolling up at normal speed, scrolling becomes very janky and jumpy, often skipping one or two rows. This only happens on macOS. I'm kind of surprised I've seen no one else mention this bug, as I can recreate it in a very simple Xcode Project. I'm wondering if anyone knows of a workaround? Steps to reproduce: Build and launch the code below Very quickly scroll all the way down using the scrollbar Scroll up at a normal speed, after a few rows it will get janky Code: struct MinimalAlbum: Identifiable { let id: Int let title: String } struct ContentView: View { private let staticAlbums: [MinimalAlbum] = (0..<1000).map { i in MinimalAlbum(id: i, title: "Album Title \(i)") } var body: some View { List { ForEach(staticAlbums) { album in Text("Album ID: \(album.id) - \(album.title)") .frame(height: 80) // Fixed height } } } }
2
0
121
Apr ’25
StoreKit not returning products after IAP localization was re-approved (Adapty: noProductIDsFound)
🔹 Description of the issue: My app uses Adapty to fetch and display in-app subscription products on a paywall. The system has worked perfectly until recently. After I edited the localizations of the subscriptions in App Store Connect, they were temporarily rejected. Since that moment, the products no longer show in the app. Even though I re-submitted the localizations and they were approved, StoreKit still does not return any products, and Adapty returns the error: less CopyEdit AdaptyError(code: 1000, message: "No products were found for provided product ids") 🔹 Error Message: noProductIDsFound — from Adapty SDK when attempting to load paywall products. 🔹 Steps to Reproduce: Open the Aida Nena app (App ID: 6737695739). Sign in with a test account or create a new one. Go to Profile → Subscription. The paywall will show but no products will appear. Logs show Adapty attempting to fetch product IDs but none are found in StoreKit. 🔹 What I’ve Tried: Re-activating the Adapty SDK. Forcing a cache reset via app reinstall. Re-checking App Store Connect: all subscriptions and localizations now show Approved (green). Waiting several hours in case of propagation. Verifying correct product identifiers are in use — they haven’t changed. 🔹 My Hypothesis: The StoreKit product metadata is still not properly refreshed after the rejection and re-approval of the localizations. This is preventing Adapty (and StoreKit) from returning the product data even though the products are live and approved. 🔹 Additional Info: SDK: @adapty/react-native + Adapty iOS SDK under the hood. This seems to be a known edge case among developers after a product's metadata/localization is changed and re-approved. Thanks, I appreciate any help.
1
0
192
Jun ’25
Xcode 26 - New Swift 6.2 Concurrency Sendable Closure Problems
I'm running into a seemingly unsolvable compile problem with the new Xcode 26 and Swift 6.2. Here's the issue. I've got this code that was working before: NSAnimationContext.runAnimationGroup({(context) -&gt; Void in context.duration = animated ? 0.5 : 0 clipView.animator().setBoundsOrigin(p) }, completionHandler: { self.endIgnoreFrameChangeEvents() }) It's very simple. The clipView is a scrollView.contentView, and "animated" is a bool, and p is an NSPoint It captures those things, scrolls the clip view (animating if needed) to the point, and then calls a method in self to signal that the animation has completed. I'm getting this error: Call to main actor-isolated instance method 'endIgnoreFrameChangeEvents()' in a synchronous nonisolated context So, I don't understand why so many of my callbacks are getting this error now, when they worked before, but it is easy to solve. There's also an async variation of runAnimationGroup. So let's use that instead: Task { await NSAnimationContext.runAnimationGroup({(context) -&gt; Void in context.duration = animated ? 0.5 : 0 clipView.animator().setBoundsOrigin(p) }) self.endIgnoreFrameChangeEvents() } So, when I do this, then I get a new error. Now it doesn't like the first enclosure. Which it was perfectly happy with before. Here's the error: Sending value of non-Sendable type '(NSAnimationContext) -&gt; Void' risks causing data races Here are the various overloaded definitions of runAnimationGroup: open class func runAnimationGroup(_ changes: (NSAnimationContext) -&gt; Void, completionHandler: (@Sendable () -&gt; Void)? = nil) @available(macOS 10.7, *) open class func runAnimationGroup(_ changes: (NSAnimationContext) -&gt; Void) async @available(macOS 10.12, *) open class func runAnimationGroup(_ changes: (NSAnimationContext) -&gt; Void) The middle one is the one that I'm trying to use. The closure in this overload isn't marked sendable. But, lets try making it sendable now to appease the compiler, since that seems to be what the error is asking for: Task { await NSAnimationContext.runAnimationGroup({ @Sendable (context) -&gt; Void in context.duration = animated ? 0.5 : 0 clipView.animator().setBoundsOrigin(p) }) self.endIgnoreFrameChangeEvents() } So now I get errors in the closure itself. There are 2 errors, only one of which is easy to get rid of. Call to main actor-isolated instance method 'animator()' in a synchronous nonisolated context Call to main actor-isolated instance method 'setBoundsOrigin' in a synchronous nonisolated context So I can get rid of that first error by capturing clipView.animator() outside of the closure and capturing the animator. But the second error, calling setBoundsOrigin(p) - I can't move that outside of the closure, because that is the thing I am animating! Further, any property you're going to me animating in runAnimationGroup is going to be isolated to the main actor. So now my code looks like this, and I'm stuck with this last error I can't eliminate: let animator = clipView.animator() Task { await NSAnimationContext.runAnimationGroup({ @Sendable (context) -&gt; Void in context.duration = animated ? 0.5 : 0 animator.setBoundsOrigin(p) }) self.endIgnoreFrameChangeEvents() } Call to main actor-isolated instance method 'setBoundsOrigin' in a synchronous nonisolated context There's something that I am not understanding here that has changed about how it is treating closures. This whole thing is running synchronously on the main thread anyway, isn't it? It's being called from a MainActor context in one of my NSViews. I would expect the closure in runAnimationGroup would need to be isolated to the main actor, anyway, since any animatable property is going to be marked MainActor. How do I accomplish what I am trying to do here? One last note: There were some new settings introduced at WWDC that supposedly make this stuff simpler - "Approchable Concurrency". In this example, I didn't have that turned on. Turning it on and setting the default to MainActor does not seem to have solved this problem. (All it does is cause hundreds of new concurrency errors in other parts of my code that weren't there before!) This is the last new error in my code (without those settings), but I can't see any way around this one. It's basically the same error as the others I was getting (in the callback closures), except with those I could eliminate the closures by changing APIs.
5
0
530
Jun ’25
Arabic Text Appears Reversed and Broken in SwiftUI Lists, TextFields, and Pickers
Hello, I would like to report a critical issue with Arabic text rendering in SwiftUI apps on iOS and iPadOS. When using Arabic as the default language (Right-to-Left - RTL), Arabic text appears reversed and disconnected inside several SwiftUI components like: List Section TextField Picker Custom views (like StudentRowView) Even though the environment is set to .layoutDirection(.rightToLeft), the dynamic Arabic text is not rendered properly. Static headers display correctly, but any dynamic content (student names, notes, field titles) becomes broken and unreadable. Examples where the issue occurs: AboutView.swift → Arabic text inside List and Section SettingsView.swift → TextField placeholders and Picker options StudentRowView.swift → Student names and grade field titles Environment: SwiftUI 5 (Xcode 15+) iOS 17+ Reproducible 100% on both Simulator and real devices. Expected Behavior: Arabic text should appear properly connected, right-aligned, and readable without any manual workaround for each Text or TextField. Workarounds Tried: Manually setting .multilineTextAlignment(.trailing) (inefficient) Wrapping every Text inside an HStack with Spacer (hacky) Building custom UIKit views (defeats purpose of SwiftUI simplicity) Formal Feedback: I have submitted a Feedback Assistant report We hope this issue will be prioritized and fixed to improve SwiftUI's support for Arabic and other RTL languages. Thank you.
1
0
169
Apr ’25
Focused Views Get Clipped When Using NavigationStack or Form in Split-Screen Layout on tvOS
When attempting to replicate the tvOS Settings menu layout, where the screen is divided horizontally into two sections, placing a NavigationStack or a Form view on either side of the screen causes focusable views (such as Button, TextField, Toggle, etc.) to be visually clipped when they receive focus and apply the default scaling animation. Specifically: If the Form or NavigationStack is placed on the right side, the left edge of the focused view gets clipped. If placed on the left side, the right edge of the focused view gets clipped. This issue affects any focusable child view inside the Form or NavigationStack when focus scaling is triggered. Example code: struct TVAppMenuMainView: View { var body: some View { VStack { Text("Settings Menu") .font(.title) HStack { VStack { Text("Left Pane") } .frame(width: UIScreen.main.bounds.width * 0.4) // represents only 40% of the screen .frame(maxHeight: .infinity) .padding(.bottom) Divider() NavigationStack { Form { // All the buttons will get cut on the left side when each button is focused Button("First Button"){} Button("Second Button"){} Button("Third Button"){} Button("Forth Button"){} } } } .frame(maxHeight: .infinity) .frame(maxWidth: .infinity) } .background(.ultraThickMaterial) } } How it looks: What I have tried: .clipped modifiers .ignoresSafeArea Modifying the size manually Using just a ScrollView with VStack works as intended, but as soon as NavigationStack or Form are added, the buttons get clipped. This was tested on the latest 18.5 tvOS BETA
0
0
92
Apr ’25
-applicationDockMenu: method on NSApplicationDelegate doesn't work when attached to debugger
When I add a simple menu to the dock via the NSApplicationDelegate method -applicationDockMenu: and run the app from Xcode it doesn't work. -(NSMenu*)applicationDockMenu:(NSApplication*)sender { NSMenu *dockMenu = [self buildDockMenu]; if (dockMenu != nil) { NSLog(@"Returning dock menu."); return dockMenu; } else { NSLog(@"Not ready to build dock menu"); return nil; } } When I run the app, my main app window shows up but nothing logs out in -applicationDockMenu: until I click outside my app's window (so if I click the desktop background, or a Finder window, or whatever). Then after I click outside my app's main window this logs out: Returning dock menu. The "Not ready to build dock menu" message does not log out. But...when I right click on the dock icon, the menu doesn't show up. But if I stop the app from Xcode and just run it not attached to the debugger, the dock menu does show up. But this makes the debugging/testing situation not ideal.
3
0
182
May ’25
SwiftUI macOS simple NavigationStack and NavigationLink -> problem on multiplatform project
I had a problem with my app (or in my setup) and searching the web I found a very simple code where part of my problem occurs. I create a new Multiplatform App and paste this code in ContentView. import SwiftUI struct ContentView: View { var body: some View { NavigationStack { VStack { Text("Navigation article") .font(.title) .padding() NavigationLink("Go to the second view", destination: SecondView()) .padding() } .navigationTitle("First View") } } } struct SecondView: View { var body: some View { Text("This is the Second view") .font(.headline) .padding() .navigationTitle("Second View") } } run on iPhone/ iOS no problem run on a Mac/macOS Going from view 1 to view 2 work, the back arrow on view 2 is there, and it is working but the second time I go to the view 2, the back arrow is gone. after looking closely I can see the Arrow Underneath the S of SecondView. I have tried many things and could not make it work. I post this in a HackingWithSwift forum and somebody tried the code and said it work. so it seems the problem could be related to my setup but I create another user in my computer , same problem and tried it on my another computer, same problem.
Topic: UI Frameworks SubTopic: SwiftUI
7
0
98
Apr ’25
ObservableObjects get retained after a TextField is focused
When presenting a SwiftUI sheet containing ObservableObject's injected using environmentObject(_) modifier, the objects are unexpectedly retained after the sheet is dismissed if a TextField within the sheet gains focus or is edited. This issue occurs on iOS and iPadOS (on macOS the objects are always released), observable both in the simulator and on physical devices, and happens even when the view does not explicitly reference these environment objects, and the TextField's content isn't bound to them. Expected Results: When the sheet is dismissed, all environment objects passed to the sheet’s content view should be released (deinitialized), regardless of whether the TextField was focused or edited. Actual Results: If the TextField was focused or edited, environment objects (ObservableA and ObservableB) are retained after the sheet is dismissed. They are not deinitialized as expected, leading to unintended retention. Interestingly, previously retained copies of these environment objects, if any, are released precisely at the moment the TextField becomes focused on subsequent presentations, indicating an inconsistent lifecycle behavior. I have filed an issue FB17226970 Sample Code Below is a sample code that consistently shows the issue on iOS 18.3+. Steps to Reproduce: Run the attached SwiftUI sample. Tap the button labeled “Show Sheet” to present a sheet. Tap on the TextField to focus or begin editing. Dismiss the sheet by dragging it down or by other dismissal methods (e.g., tapping outside on iPadOS). import SwiftUI struct ContentView: View { @State private var showSheet: Bool = false var body: some View { VStack { Button("Show Sheet") { showSheet = true } } .sheet(isPresented: $showSheet) { SheetContentView() .environmentObject(ObservableA()) .environmentObject(ObservableB()) } } } struct SheetContentView: View { @State private var text: String = "" var body: some View { TextField("Select to retain observable objects", text: $text) .textFieldStyle(.roundedBorder) } } final class ObservableA: ObservableObject { init() { print(type(of: self), #function) } deinit { print(type(of: self), #function) } } final class ObservableB: ObservableObject { init() { print(type(of: self), #function) } deinit { print(type(of: self), #function) } } #Preview { ContentView() }
2
0
204
Apr ’25
Use Custom UIApplication Subclass with SwiftUI
I have a SwiftUI app which needs the Ivanti AppConnect SDK. The docs only show how to integrate it into a Swift/UIKit app. But I need it to work with SwiftUI. I probably could make a UIKit base app and then load my existing SwiftUI views and code through a SwiftUI component host or something. But I'd like to avoid that if possible. Here is where I'm stuck: The AppConnect framework loads through a custom UIApplication subclass in the main.swift file: import Foundation import AppConnect UIApplicationMain( CommandLine.argc, CommandLine.unsafeArgv, ACUIApplicationClassName, NSStringFromClass(AppDelegate.self) ) The startup works as expected, and the expected function is called in the AppDelegate class: func application( _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {...} However, the SwiftUI view is not loaded and the scree stays blank. I implemented a SceneDelegate.swift class which doesn't seem to be called. Also, the following function in the AppDelegate doesn't get called either: func application( _ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {...} So how do I bootstrap SwiftUI with a custom UIApplication class? can that be done with the @main macro somehow? I'm still pretty new to Swift and iOS development. Any help is appreciated
Topic: UI Frameworks SubTopic: SwiftUI Tags:
0
0
80
May ’25
Using .searchable inside NavigationStack inside TabView (iOS)
I noticed that when using .searchable inside a NavigationStack thats inside a TabView, the searchbar briefly overlays the content before disappearing. After that, it is hidden and appears as expected when swiping down. This only happens when the .searchable is inside the NavigationStack, there is at least one navigationTitle and the NavigationStack is inside a TabView. Tested on simulator and real device. I would appreciate any help. Thanks! struct FirstScreen: View { var body: some View { TabView { Tab("Tab", systemImage: "heart") { NavigationStack { NavigationLink { SecondScreen() } label: { Text("Go to second screen") } .navigationTitle("First Screen") } } } } } struct SecondScreen: View { @State private var text: String = "" var body: some View { List { Text("Some view that extends all the way to the top") } .searchable(text: $text) .navigationTitle("Second Screen") } }
2
0
130
May ’25
UICollectionView with orthogonal (horizontal) section not calling touchesShouldCancel(in:)
I have a UICollectionView with horizontally scrolling sections. In the cell I have a UIButton. I need to cancel the touches when the user swipes horizontally but it does not work. touchesShouldCancel(in:) is only called when swiping vertically over the UIButton, not horizontally. Is there a way to make it work? Sample code below import UIKit class ConferenceVideoSessionsViewController: UIViewController { let videosController = ConferenceVideoController() var collectionView: UICollectionView! = nil var dataSource: UICollectionViewDiffableDataSource <ConferenceVideoController.VideoCollection, ConferenceVideoController.Video>! = nil var currentSnapshot: NSDiffableDataSourceSnapshot <ConferenceVideoController.VideoCollection, ConferenceVideoController.Video>! = nil static let titleElementKind = "title-element-kind" override func viewDidLoad() { super.viewDidLoad() navigationItem.title = "Conference Videos" configureHierarchy() configureDataSource() } } extension ConferenceVideoSessionsViewController { func createLayout() -> UICollectionViewLayout { let sectionProvider = { (sectionIndex: Int, layoutEnvironment: NSCollectionLayoutEnvironment) -> NSCollectionLayoutSection? in let itemSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0), heightDimension: .fractionalHeight(1.0)) let item = NSCollectionLayoutItem(layoutSize: itemSize) // if we have the space, adapt and go 2-up + peeking 3rd item let groupFractionalWidth = CGFloat(layoutEnvironment.container.effectiveContentSize.width > 500 ? 0.425 : 0.85) let groupSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(groupFractionalWidth), heightDimension: .absolute(200)) let group = NSCollectionLayoutGroup.horizontal(layoutSize: groupSize, subitems: [item]) let section = NSCollectionLayoutSection(group: group) section.orthogonalScrollingBehavior = .continuous section.interGroupSpacing = 20 section.contentInsets = NSDirectionalEdgeInsets(top: 0, leading: 20, bottom: 0, trailing: 20) return section } let config = UICollectionViewCompositionalLayoutConfiguration() config.interSectionSpacing = 20 let layout = UICollectionViewCompositionalLayout( sectionProvider: sectionProvider, configuration: config) return layout } } extension ConferenceVideoSessionsViewController { func configureHierarchy() { collectionView = MyUICollectionView(frame: .zero, collectionViewLayout: createLayout()) collectionView.translatesAutoresizingMaskIntoConstraints = false collectionView.backgroundColor = .systemBackground view.addSubview(collectionView) NSLayoutConstraint.activate([ collectionView.leadingAnchor.constraint(equalTo: view.leadingAnchor), collectionView.trailingAnchor.constraint(equalTo: view.trailingAnchor), collectionView.topAnchor.constraint(equalTo: view.topAnchor), collectionView.bottomAnchor.constraint(equalTo: view.bottomAnchor) ]) collectionView.canCancelContentTouches = true } func configureDataSource() { let cellRegistration = UICollectionView.CellRegistration <ConferenceVideoCell, ConferenceVideoController.Video> { (cell, indexPath, video) in // Populate the cell with our item description. cell.buttonView.setTitle("Push, hold and swipe", for: .normal) cell.titleLabel.text = video.title } dataSource = UICollectionViewDiffableDataSource <ConferenceVideoController.VideoCollection, ConferenceVideoController.Video>(collectionView: collectionView) { (collectionView: UICollectionView, indexPath: IndexPath, video: ConferenceVideoController.Video) -> UICollectionViewCell? in // Return the cell. return collectionView.dequeueConfiguredReusableCell(using: cellRegistration, for: indexPath, item: video) } currentSnapshot = NSDiffableDataSourceSnapshot <ConferenceVideoController.VideoCollection, ConferenceVideoController.Video>() videosController.collections.forEach { let collection = $0 currentSnapshot.appendSections([collection]) currentSnapshot.appendItems(collection.videos) } dataSource.apply(currentSnapshot, animatingDifferences: false) } } class MyUICollectionView: UICollectionView { override func touchesShouldCancel(in view: UIView) -> Bool { print("AH: touchesShouldCancel view \(view.description)") if view is MyUIButton { return true } return false } } final class MyUIButton: UIButton { } class ConferenceVideoCell: UICollectionViewCell { static let reuseIdentifier = "video-cell-reuse-identifier" let buttonView = MyUIButton() let titleLabel = UILabel() override init(frame: CGRect) { super.init(frame: frame) configure() } required init?(coder: NSCoder) { fatalError() } } extension ConferenceVideoCell { func configure() { buttonView.translatesAutoresizingMaskIntoConstraints = false titleLabel.translatesAutoresizingMaskIntoConstraints = false contentView.addSubview(buttonView) contentView.addSubview(titleLabel) titleLabel.font = UIFont.preferredFont(forTextStyle: .caption1) titleLabel.adjustsFontForContentSizeCategory = true buttonView.layer.borderColor = UIColor.black.cgColor buttonView.layer.borderWidth = 1 buttonView.layer.cornerRadius = 4 buttonView.backgroundColor = UIColor.systemPink let spacing = CGFloat(10) NSLayoutConstraint.activate([ buttonView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor), buttonView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor), buttonView.topAnchor.constraint(equalTo: contentView.topAnchor), titleLabel.topAnchor.constraint(equalTo: buttonView.bottomAnchor, constant: spacing), titleLabel.leadingAnchor.constraint(equalTo: contentView.leadingAnchor), titleLabel.trailingAnchor.constraint(equalTo: contentView.trailingAnchor), titleLabel.bottomAnchor.constraint(equalTo: contentView.bottomAnchor) ]) } }
Topic: UI Frameworks SubTopic: UIKit Tags:
1
0
103
Jun ’25
Siri Shortcuts of Siri Intent to Voice Control Parts of App
I am new to the idea of Siri Shortcuts and App Intents. What I want to do is use Siri to run a function in my app. Such as saying to Siri Zoom in map and that will then call a function in my app where I can zoom in the map. Similarly, I could say Zoom out map and it would call a function to zoom out my map. I do not need to share any sort of shortcut with the Shortcuts app. Can someone please point me in the right direction for what type of intents I need to use for this?
0
0
237
Apr ’25
How to prevent iOS VoiceOver from speaking accessibility-labels and traits?
I have a button with the following properties: accessibilityLabel: "Action Button", traits: "Button", accessibilityHint: "Performs the main action". The voiceover reads the button as follows: Action Button, Button, Performs the main action. I want to understand how to configure it to only speak the accessibilityHint or only the accessibilityLabel and never speak the traits. In another example, a switch has the traits: Button, and Toggle. So these traits are a part of what the voiceover speaks. I want only the accessibilityLabel or accessibilityHint to be spoken in this case. Please let me know how. Thanks
1
0
136
May ’25
Search field as in Mail App
How can i achieve the same behavior as the bottom bar on the Mail app? Button -> Search Field -> Button right now, if do as follows, they overlap as if they are not in the same space NavigationStack { VStack { HeaderView() ListView() } } .toolbar(.hidden, for: .tabBar) .searchable(text: $searchText) .searchToolbarBehavior(.minimize) .toolbar { ToolbarItem(placement: .bottomBar) { Button { } label: { Label("Button1", systemImage: "person") } } ToolbarItem(placement: .bottomBar) { Button { } label: { Label("Button2", systemImage: "person") } } }
1
0
108
Jun ’25
Tab Bar Controller Not Using Safe Area
I have several apps where I successfully implemented Safe Area Margins, but this app uses a Tab Bar Controller and it ignores the safe areas. I am using Xcode 16.2, and Storyboards. The "Use Safe Area Layout Guides" is checked for every scene, yet none are using the safe area. Any clues?
Topic: UI Frameworks SubTopic: UIKit
3
0
88
Apr ’25
Xcode 16.3(16E140) failing to debug run but succeeding to build.
Reproduction procedure Launch Xcode and press shift+command+N to create a macOS App project. Edit the generated ContentView.swift to the following content: struct ContentView: View { @State var txt: String = “” var body: some View { VStack { Text(“Hello, world!\(txt)”) TextField(“input”, text: $txt) onSubmit { // lack of a period letter. // .onSubmit { // Correct code print(“onSubmit\(txt)”) } } } } Build with command+B and it succeeds. Debug with command+R, but a rainbow wheel appears and the window does not show. An error is displayed in Xcode’s Preview Canvas, preventing preview.
1
0
119
May ’25
ssue with Session Sharing Between Safari and ASWebAuthenticationSession
We are experiencing an issue with session sharing on iOS and would appreciate your guidance. We operate and control our own OpenID Connect (OIDC) server. Our iOS application uses ASWebAuthenticationSession to authenticate users. We're unable to get the authentication session to be shared between the Safari app and the app's ASWebAuthenticationSession. This results in users having to re-authenticate despite being logged in via Safari. We've attempted various configurations related to cookie SameSite settings. These adjustments resolved the session sharing issue on Android using Chrome Custom Tabs. However, no changes we've tried have enabled session sharing to work as expected on iOS. According to documentation from Apple, Microsoft, Okta, and Auth0, session sharing between Safari and ASWebAuthenticationSession should work. Question: Are there any additional settings, configurations, or platform limitations we should be aware of that could impact session sharing on iOS? Where else can we look to resolve this issue?
Topic: UI Frameworks SubTopic: General
Replies
0
Boosts
0
Views
138
Activity
May ’25
Scrolling up in List after having quickly scrolled down becomes jumpy
There seems to be a bug; when scrolling very quickly down a List, and then scrolling up at normal speed, scrolling becomes very janky and jumpy, often skipping one or two rows. This only happens on macOS. I'm kind of surprised I've seen no one else mention this bug, as I can recreate it in a very simple Xcode Project. I'm wondering if anyone knows of a workaround? Steps to reproduce: Build and launch the code below Very quickly scroll all the way down using the scrollbar Scroll up at a normal speed, after a few rows it will get janky Code: struct MinimalAlbum: Identifiable { let id: Int let title: String } struct ContentView: View { private let staticAlbums: [MinimalAlbum] = (0..<1000).map { i in MinimalAlbum(id: i, title: "Album Title \(i)") } var body: some View { List { ForEach(staticAlbums) { album in Text("Album ID: \(album.id) - \(album.title)") .frame(height: 80) // Fixed height } } } }
Replies
2
Boosts
0
Views
121
Activity
Apr ’25
StoreKit not returning products after IAP localization was re-approved (Adapty: noProductIDsFound)
🔹 Description of the issue: My app uses Adapty to fetch and display in-app subscription products on a paywall. The system has worked perfectly until recently. After I edited the localizations of the subscriptions in App Store Connect, they were temporarily rejected. Since that moment, the products no longer show in the app. Even though I re-submitted the localizations and they were approved, StoreKit still does not return any products, and Adapty returns the error: less CopyEdit AdaptyError(code: 1000, message: "No products were found for provided product ids") 🔹 Error Message: noProductIDsFound — from Adapty SDK when attempting to load paywall products. 🔹 Steps to Reproduce: Open the Aida Nena app (App ID: 6737695739). Sign in with a test account or create a new one. Go to Profile → Subscription. The paywall will show but no products will appear. Logs show Adapty attempting to fetch product IDs but none are found in StoreKit. 🔹 What I’ve Tried: Re-activating the Adapty SDK. Forcing a cache reset via app reinstall. Re-checking App Store Connect: all subscriptions and localizations now show Approved (green). Waiting several hours in case of propagation. Verifying correct product identifiers are in use — they haven’t changed. 🔹 My Hypothesis: The StoreKit product metadata is still not properly refreshed after the rejection and re-approval of the localizations. This is preventing Adapty (and StoreKit) from returning the product data even though the products are live and approved. 🔹 Additional Info: SDK: @adapty/react-native + Adapty iOS SDK under the hood. This seems to be a known edge case among developers after a product's metadata/localization is changed and re-approved. Thanks, I appreciate any help.
Replies
1
Boosts
0
Views
192
Activity
Jun ’25
How to implement this textfield in SwitfUI
In Contact app on watchOS, there're some textfields. But I can not find which textfield could implement it. Any one has some idea?
Replies
3
Boosts
0
Views
86
Activity
Apr ’25
Xcode 26 - New Swift 6.2 Concurrency Sendable Closure Problems
I'm running into a seemingly unsolvable compile problem with the new Xcode 26 and Swift 6.2. Here's the issue. I've got this code that was working before: NSAnimationContext.runAnimationGroup({(context) -&gt; Void in context.duration = animated ? 0.5 : 0 clipView.animator().setBoundsOrigin(p) }, completionHandler: { self.endIgnoreFrameChangeEvents() }) It's very simple. The clipView is a scrollView.contentView, and "animated" is a bool, and p is an NSPoint It captures those things, scrolls the clip view (animating if needed) to the point, and then calls a method in self to signal that the animation has completed. I'm getting this error: Call to main actor-isolated instance method 'endIgnoreFrameChangeEvents()' in a synchronous nonisolated context So, I don't understand why so many of my callbacks are getting this error now, when they worked before, but it is easy to solve. There's also an async variation of runAnimationGroup. So let's use that instead: Task { await NSAnimationContext.runAnimationGroup({(context) -&gt; Void in context.duration = animated ? 0.5 : 0 clipView.animator().setBoundsOrigin(p) }) self.endIgnoreFrameChangeEvents() } So, when I do this, then I get a new error. Now it doesn't like the first enclosure. Which it was perfectly happy with before. Here's the error: Sending value of non-Sendable type '(NSAnimationContext) -&gt; Void' risks causing data races Here are the various overloaded definitions of runAnimationGroup: open class func runAnimationGroup(_ changes: (NSAnimationContext) -&gt; Void, completionHandler: (@Sendable () -&gt; Void)? = nil) @available(macOS 10.7, *) open class func runAnimationGroup(_ changes: (NSAnimationContext) -&gt; Void) async @available(macOS 10.12, *) open class func runAnimationGroup(_ changes: (NSAnimationContext) -&gt; Void) The middle one is the one that I'm trying to use. The closure in this overload isn't marked sendable. But, lets try making it sendable now to appease the compiler, since that seems to be what the error is asking for: Task { await NSAnimationContext.runAnimationGroup({ @Sendable (context) -&gt; Void in context.duration = animated ? 0.5 : 0 clipView.animator().setBoundsOrigin(p) }) self.endIgnoreFrameChangeEvents() } So now I get errors in the closure itself. There are 2 errors, only one of which is easy to get rid of. Call to main actor-isolated instance method 'animator()' in a synchronous nonisolated context Call to main actor-isolated instance method 'setBoundsOrigin' in a synchronous nonisolated context So I can get rid of that first error by capturing clipView.animator() outside of the closure and capturing the animator. But the second error, calling setBoundsOrigin(p) - I can't move that outside of the closure, because that is the thing I am animating! Further, any property you're going to me animating in runAnimationGroup is going to be isolated to the main actor. So now my code looks like this, and I'm stuck with this last error I can't eliminate: let animator = clipView.animator() Task { await NSAnimationContext.runAnimationGroup({ @Sendable (context) -&gt; Void in context.duration = animated ? 0.5 : 0 animator.setBoundsOrigin(p) }) self.endIgnoreFrameChangeEvents() } Call to main actor-isolated instance method 'setBoundsOrigin' in a synchronous nonisolated context There's something that I am not understanding here that has changed about how it is treating closures. This whole thing is running synchronously on the main thread anyway, isn't it? It's being called from a MainActor context in one of my NSViews. I would expect the closure in runAnimationGroup would need to be isolated to the main actor, anyway, since any animatable property is going to be marked MainActor. How do I accomplish what I am trying to do here? One last note: There were some new settings introduced at WWDC that supposedly make this stuff simpler - "Approchable Concurrency". In this example, I didn't have that turned on. Turning it on and setting the default to MainActor does not seem to have solved this problem. (All it does is cause hundreds of new concurrency errors in other parts of my code that weren't there before!) This is the last new error in my code (without those settings), but I can't see any way around this one. It's basically the same error as the others I was getting (in the callback closures), except with those I could eliminate the closures by changing APIs.
Replies
5
Boosts
0
Views
530
Activity
Jun ’25
Arabic Text Appears Reversed and Broken in SwiftUI Lists, TextFields, and Pickers
Hello, I would like to report a critical issue with Arabic text rendering in SwiftUI apps on iOS and iPadOS. When using Arabic as the default language (Right-to-Left - RTL), Arabic text appears reversed and disconnected inside several SwiftUI components like: List Section TextField Picker Custom views (like StudentRowView) Even though the environment is set to .layoutDirection(.rightToLeft), the dynamic Arabic text is not rendered properly. Static headers display correctly, but any dynamic content (student names, notes, field titles) becomes broken and unreadable. Examples where the issue occurs: AboutView.swift → Arabic text inside List and Section SettingsView.swift → TextField placeholders and Picker options StudentRowView.swift → Student names and grade field titles Environment: SwiftUI 5 (Xcode 15+) iOS 17+ Reproducible 100% on both Simulator and real devices. Expected Behavior: Arabic text should appear properly connected, right-aligned, and readable without any manual workaround for each Text or TextField. Workarounds Tried: Manually setting .multilineTextAlignment(.trailing) (inefficient) Wrapping every Text inside an HStack with Spacer (hacky) Building custom UIKit views (defeats purpose of SwiftUI simplicity) Formal Feedback: I have submitted a Feedback Assistant report We hope this issue will be prioritized and fixed to improve SwiftUI's support for Arabic and other RTL languages. Thank you.
Replies
1
Boosts
0
Views
169
Activity
Apr ’25
Focused Views Get Clipped When Using NavigationStack or Form in Split-Screen Layout on tvOS
When attempting to replicate the tvOS Settings menu layout, where the screen is divided horizontally into two sections, placing a NavigationStack or a Form view on either side of the screen causes focusable views (such as Button, TextField, Toggle, etc.) to be visually clipped when they receive focus and apply the default scaling animation. Specifically: If the Form or NavigationStack is placed on the right side, the left edge of the focused view gets clipped. If placed on the left side, the right edge of the focused view gets clipped. This issue affects any focusable child view inside the Form or NavigationStack when focus scaling is triggered. Example code: struct TVAppMenuMainView: View { var body: some View { VStack { Text("Settings Menu") .font(.title) HStack { VStack { Text("Left Pane") } .frame(width: UIScreen.main.bounds.width * 0.4) // represents only 40% of the screen .frame(maxHeight: .infinity) .padding(.bottom) Divider() NavigationStack { Form { // All the buttons will get cut on the left side when each button is focused Button("First Button"){} Button("Second Button"){} Button("Third Button"){} Button("Forth Button"){} } } } .frame(maxHeight: .infinity) .frame(maxWidth: .infinity) } .background(.ultraThickMaterial) } } How it looks: What I have tried: .clipped modifiers .ignoresSafeArea Modifying the size manually Using just a ScrollView with VStack works as intended, but as soon as NavigationStack or Form are added, the buttons get clipped. This was tested on the latest 18.5 tvOS BETA
Replies
0
Boosts
0
Views
92
Activity
Apr ’25
-applicationDockMenu: method on NSApplicationDelegate doesn't work when attached to debugger
When I add a simple menu to the dock via the NSApplicationDelegate method -applicationDockMenu: and run the app from Xcode it doesn't work. -(NSMenu*)applicationDockMenu:(NSApplication*)sender { NSMenu *dockMenu = [self buildDockMenu]; if (dockMenu != nil) { NSLog(@"Returning dock menu."); return dockMenu; } else { NSLog(@"Not ready to build dock menu"); return nil; } } When I run the app, my main app window shows up but nothing logs out in -applicationDockMenu: until I click outside my app's window (so if I click the desktop background, or a Finder window, or whatever). Then after I click outside my app's main window this logs out: Returning dock menu. The "Not ready to build dock menu" message does not log out. But...when I right click on the dock icon, the menu doesn't show up. But if I stop the app from Xcode and just run it not attached to the debugger, the dock menu does show up. But this makes the debugging/testing situation not ideal.
Replies
3
Boosts
0
Views
182
Activity
May ’25
SwiftUI macOS simple NavigationStack and NavigationLink -> problem on multiplatform project
I had a problem with my app (or in my setup) and searching the web I found a very simple code where part of my problem occurs. I create a new Multiplatform App and paste this code in ContentView. import SwiftUI struct ContentView: View { var body: some View { NavigationStack { VStack { Text("Navigation article") .font(.title) .padding() NavigationLink("Go to the second view", destination: SecondView()) .padding() } .navigationTitle("First View") } } } struct SecondView: View { var body: some View { Text("This is the Second view") .font(.headline) .padding() .navigationTitle("Second View") } } run on iPhone/ iOS no problem run on a Mac/macOS Going from view 1 to view 2 work, the back arrow on view 2 is there, and it is working but the second time I go to the view 2, the back arrow is gone. after looking closely I can see the Arrow Underneath the S of SecondView. I have tried many things and could not make it work. I post this in a HackingWithSwift forum and somebody tried the code and said it work. so it seems the problem could be related to my setup but I create another user in my computer , same problem and tried it on my another computer, same problem.
Topic: UI Frameworks SubTopic: SwiftUI
Replies
7
Boosts
0
Views
98
Activity
Apr ’25
ObservableObjects get retained after a TextField is focused
When presenting a SwiftUI sheet containing ObservableObject's injected using environmentObject(_) modifier, the objects are unexpectedly retained after the sheet is dismissed if a TextField within the sheet gains focus or is edited. This issue occurs on iOS and iPadOS (on macOS the objects are always released), observable both in the simulator and on physical devices, and happens even when the view does not explicitly reference these environment objects, and the TextField's content isn't bound to them. Expected Results: When the sheet is dismissed, all environment objects passed to the sheet’s content view should be released (deinitialized), regardless of whether the TextField was focused or edited. Actual Results: If the TextField was focused or edited, environment objects (ObservableA and ObservableB) are retained after the sheet is dismissed. They are not deinitialized as expected, leading to unintended retention. Interestingly, previously retained copies of these environment objects, if any, are released precisely at the moment the TextField becomes focused on subsequent presentations, indicating an inconsistent lifecycle behavior. I have filed an issue FB17226970 Sample Code Below is a sample code that consistently shows the issue on iOS 18.3+. Steps to Reproduce: Run the attached SwiftUI sample. Tap the button labeled “Show Sheet” to present a sheet. Tap on the TextField to focus or begin editing. Dismiss the sheet by dragging it down or by other dismissal methods (e.g., tapping outside on iPadOS). import SwiftUI struct ContentView: View { @State private var showSheet: Bool = false var body: some View { VStack { Button("Show Sheet") { showSheet = true } } .sheet(isPresented: $showSheet) { SheetContentView() .environmentObject(ObservableA()) .environmentObject(ObservableB()) } } } struct SheetContentView: View { @State private var text: String = "" var body: some View { TextField("Select to retain observable objects", text: $text) .textFieldStyle(.roundedBorder) } } final class ObservableA: ObservableObject { init() { print(type(of: self), #function) } deinit { print(type(of: self), #function) } } final class ObservableB: ObservableObject { init() { print(type(of: self), #function) } deinit { print(type(of: self), #function) } } #Preview { ContentView() }
Replies
2
Boosts
0
Views
204
Activity
Apr ’25
Use Custom UIApplication Subclass with SwiftUI
I have a SwiftUI app which needs the Ivanti AppConnect SDK. The docs only show how to integrate it into a Swift/UIKit app. But I need it to work with SwiftUI. I probably could make a UIKit base app and then load my existing SwiftUI views and code through a SwiftUI component host or something. But I'd like to avoid that if possible. Here is where I'm stuck: The AppConnect framework loads through a custom UIApplication subclass in the main.swift file: import Foundation import AppConnect UIApplicationMain( CommandLine.argc, CommandLine.unsafeArgv, ACUIApplicationClassName, NSStringFromClass(AppDelegate.self) ) The startup works as expected, and the expected function is called in the AppDelegate class: func application( _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {...} However, the SwiftUI view is not loaded and the scree stays blank. I implemented a SceneDelegate.swift class which doesn't seem to be called. Also, the following function in the AppDelegate doesn't get called either: func application( _ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {...} So how do I bootstrap SwiftUI with a custom UIApplication class? can that be done with the @main macro somehow? I'm still pretty new to Swift and iOS development. Any help is appreciated
Topic: UI Frameworks SubTopic: SwiftUI Tags:
Replies
0
Boosts
0
Views
80
Activity
May ’25
Using .searchable inside NavigationStack inside TabView (iOS)
I noticed that when using .searchable inside a NavigationStack thats inside a TabView, the searchbar briefly overlays the content before disappearing. After that, it is hidden and appears as expected when swiping down. This only happens when the .searchable is inside the NavigationStack, there is at least one navigationTitle and the NavigationStack is inside a TabView. Tested on simulator and real device. I would appreciate any help. Thanks! struct FirstScreen: View { var body: some View { TabView { Tab("Tab", systemImage: "heart") { NavigationStack { NavigationLink { SecondScreen() } label: { Text("Go to second screen") } .navigationTitle("First Screen") } } } } } struct SecondScreen: View { @State private var text: String = "" var body: some View { List { Text("Some view that extends all the way to the top") } .searchable(text: $text) .navigationTitle("Second Screen") } }
Replies
2
Boosts
0
Views
130
Activity
May ’25
UICollectionView with orthogonal (horizontal) section not calling touchesShouldCancel(in:)
I have a UICollectionView with horizontally scrolling sections. In the cell I have a UIButton. I need to cancel the touches when the user swipes horizontally but it does not work. touchesShouldCancel(in:) is only called when swiping vertically over the UIButton, not horizontally. Is there a way to make it work? Sample code below import UIKit class ConferenceVideoSessionsViewController: UIViewController { let videosController = ConferenceVideoController() var collectionView: UICollectionView! = nil var dataSource: UICollectionViewDiffableDataSource <ConferenceVideoController.VideoCollection, ConferenceVideoController.Video>! = nil var currentSnapshot: NSDiffableDataSourceSnapshot <ConferenceVideoController.VideoCollection, ConferenceVideoController.Video>! = nil static let titleElementKind = "title-element-kind" override func viewDidLoad() { super.viewDidLoad() navigationItem.title = "Conference Videos" configureHierarchy() configureDataSource() } } extension ConferenceVideoSessionsViewController { func createLayout() -> UICollectionViewLayout { let sectionProvider = { (sectionIndex: Int, layoutEnvironment: NSCollectionLayoutEnvironment) -> NSCollectionLayoutSection? in let itemSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0), heightDimension: .fractionalHeight(1.0)) let item = NSCollectionLayoutItem(layoutSize: itemSize) // if we have the space, adapt and go 2-up + peeking 3rd item let groupFractionalWidth = CGFloat(layoutEnvironment.container.effectiveContentSize.width > 500 ? 0.425 : 0.85) let groupSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(groupFractionalWidth), heightDimension: .absolute(200)) let group = NSCollectionLayoutGroup.horizontal(layoutSize: groupSize, subitems: [item]) let section = NSCollectionLayoutSection(group: group) section.orthogonalScrollingBehavior = .continuous section.interGroupSpacing = 20 section.contentInsets = NSDirectionalEdgeInsets(top: 0, leading: 20, bottom: 0, trailing: 20) return section } let config = UICollectionViewCompositionalLayoutConfiguration() config.interSectionSpacing = 20 let layout = UICollectionViewCompositionalLayout( sectionProvider: sectionProvider, configuration: config) return layout } } extension ConferenceVideoSessionsViewController { func configureHierarchy() { collectionView = MyUICollectionView(frame: .zero, collectionViewLayout: createLayout()) collectionView.translatesAutoresizingMaskIntoConstraints = false collectionView.backgroundColor = .systemBackground view.addSubview(collectionView) NSLayoutConstraint.activate([ collectionView.leadingAnchor.constraint(equalTo: view.leadingAnchor), collectionView.trailingAnchor.constraint(equalTo: view.trailingAnchor), collectionView.topAnchor.constraint(equalTo: view.topAnchor), collectionView.bottomAnchor.constraint(equalTo: view.bottomAnchor) ]) collectionView.canCancelContentTouches = true } func configureDataSource() { let cellRegistration = UICollectionView.CellRegistration <ConferenceVideoCell, ConferenceVideoController.Video> { (cell, indexPath, video) in // Populate the cell with our item description. cell.buttonView.setTitle("Push, hold and swipe", for: .normal) cell.titleLabel.text = video.title } dataSource = UICollectionViewDiffableDataSource <ConferenceVideoController.VideoCollection, ConferenceVideoController.Video>(collectionView: collectionView) { (collectionView: UICollectionView, indexPath: IndexPath, video: ConferenceVideoController.Video) -> UICollectionViewCell? in // Return the cell. return collectionView.dequeueConfiguredReusableCell(using: cellRegistration, for: indexPath, item: video) } currentSnapshot = NSDiffableDataSourceSnapshot <ConferenceVideoController.VideoCollection, ConferenceVideoController.Video>() videosController.collections.forEach { let collection = $0 currentSnapshot.appendSections([collection]) currentSnapshot.appendItems(collection.videos) } dataSource.apply(currentSnapshot, animatingDifferences: false) } } class MyUICollectionView: UICollectionView { override func touchesShouldCancel(in view: UIView) -> Bool { print("AH: touchesShouldCancel view \(view.description)") if view is MyUIButton { return true } return false } } final class MyUIButton: UIButton { } class ConferenceVideoCell: UICollectionViewCell { static let reuseIdentifier = "video-cell-reuse-identifier" let buttonView = MyUIButton() let titleLabel = UILabel() override init(frame: CGRect) { super.init(frame: frame) configure() } required init?(coder: NSCoder) { fatalError() } } extension ConferenceVideoCell { func configure() { buttonView.translatesAutoresizingMaskIntoConstraints = false titleLabel.translatesAutoresizingMaskIntoConstraints = false contentView.addSubview(buttonView) contentView.addSubview(titleLabel) titleLabel.font = UIFont.preferredFont(forTextStyle: .caption1) titleLabel.adjustsFontForContentSizeCategory = true buttonView.layer.borderColor = UIColor.black.cgColor buttonView.layer.borderWidth = 1 buttonView.layer.cornerRadius = 4 buttonView.backgroundColor = UIColor.systemPink let spacing = CGFloat(10) NSLayoutConstraint.activate([ buttonView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor), buttonView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor), buttonView.topAnchor.constraint(equalTo: contentView.topAnchor), titleLabel.topAnchor.constraint(equalTo: buttonView.bottomAnchor, constant: spacing), titleLabel.leadingAnchor.constraint(equalTo: contentView.leadingAnchor), titleLabel.trailingAnchor.constraint(equalTo: contentView.trailingAnchor), titleLabel.bottomAnchor.constraint(equalTo: contentView.bottomAnchor) ]) } }
Topic: UI Frameworks SubTopic: UIKit Tags:
Replies
1
Boosts
0
Views
103
Activity
Jun ’25
How do I create Edit Action Menus in SwiftUI on macOS?
Various TextField and TextView elements of Apple apps have text edit actions for text correction, but also auto completion. How can I create such a menu for a TextField in SwiftUI on macOS? the textCompletion modifier did not result in this menu. Many thanks in advance! Jan
Topic: UI Frameworks SubTopic: SwiftUI
Replies
0
Boosts
0
Views
49
Activity
May ’25
Siri Shortcuts of Siri Intent to Voice Control Parts of App
I am new to the idea of Siri Shortcuts and App Intents. What I want to do is use Siri to run a function in my app. Such as saying to Siri Zoom in map and that will then call a function in my app where I can zoom in the map. Similarly, I could say Zoom out map and it would call a function to zoom out my map. I do not need to share any sort of shortcut with the Shortcuts app. Can someone please point me in the right direction for what type of intents I need to use for this?
Replies
0
Boosts
0
Views
237
Activity
Apr ’25
How to prevent iOS VoiceOver from speaking accessibility-labels and traits?
I have a button with the following properties: accessibilityLabel: "Action Button", traits: "Button", accessibilityHint: "Performs the main action". The voiceover reads the button as follows: Action Button, Button, Performs the main action. I want to understand how to configure it to only speak the accessibilityHint or only the accessibilityLabel and never speak the traits. In another example, a switch has the traits: Button, and Toggle. So these traits are a part of what the voiceover speaks. I want only the accessibilityLabel or accessibilityHint to be spoken in this case. Please let me know how. Thanks
Replies
1
Boosts
0
Views
136
Activity
May ’25
Search field as in Mail App
How can i achieve the same behavior as the bottom bar on the Mail app? Button -> Search Field -> Button right now, if do as follows, they overlap as if they are not in the same space NavigationStack { VStack { HeaderView() ListView() } } .toolbar(.hidden, for: .tabBar) .searchable(text: $searchText) .searchToolbarBehavior(.minimize) .toolbar { ToolbarItem(placement: .bottomBar) { Button { } label: { Label("Button1", systemImage: "person") } } ToolbarItem(placement: .bottomBar) { Button { } label: { Label("Button2", systemImage: "person") } } }
Replies
1
Boosts
0
Views
108
Activity
Jun ’25
Tab Bar Controller Not Using Safe Area
I have several apps where I successfully implemented Safe Area Margins, but this app uses a Tab Bar Controller and it ignores the safe areas. I am using Xcode 16.2, and Storyboards. The "Use Safe Area Layout Guides" is checked for every scene, yet none are using the safe area. Any clues?
Topic: UI Frameworks SubTopic: UIKit
Replies
3
Boosts
0
Views
88
Activity
Apr ’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
56
Activity
Jun ’25
Xcode 16.3(16E140) failing to debug run but succeeding to build.
Reproduction procedure Launch Xcode and press shift+command+N to create a macOS App project. Edit the generated ContentView.swift to the following content: struct ContentView: View { @State var txt: String = “” var body: some View { VStack { Text(“Hello, world!\(txt)”) TextField(“input”, text: $txt) onSubmit { // lack of a period letter. // .onSubmit { // Correct code print(“onSubmit\(txt)”) } } } } Build with command+B and it succeeds. Debug with command+R, but a rainbow wheel appears and the window does not show. An error is displayed in Xcode’s Preview Canvas, preventing preview.
Replies
1
Boosts
0
Views
119
Activity
May ’25