Apparently now with iOS 26.1 if you have .tabViewBottomAccessory { } you get a pill shape floater all the time. That was not like that in 26.0.
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.
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
After updating to Xcode 26 my XCUITests are now failing as during execution exceptions are being raised and caught by my catch all breakpoint
These exceptions are only raised during testing, and seem to be referencing some private internal property. It happens when trying to tap a button based off an accessibilityIdentifier
e.g.
accessibilityIdentifier = "tertiary-button"
...
...
app.buttons["tertiary-button"].tap()
The full error is:
Thread 1: "[<UIKit.ButtonBarButtonVisualProvider 0x600003b4aa00> valueForUndefinedKey:]: this class is not key value coding-compliant for the key _titleButton."
Anyone found any workarounds or solutions? I need to get my tests running on the liquid glass UI
I have a macOS app made with SwiftUI where I want to show a list of data in a tabular fashion. SwiftUI Table seems to be the only built-in component that can do this.
I would like to let the user size the columns and have their widths restored when the app is relaunched. I can find no documentation on how to do this and it does not seem to be saved and restored automatically.
I can find no way to listen for changes in the column widths when the user resizes and no way to set the size from code.
For a macOS app it seems that the only way to set the width of a column is to use e.g. .width(min: 200, max: 200). This in effect disables resizing of the column. It seems that idealSize is totally ignored on macOS.
Any suggestions?
I Implement a 'SubscriptionStoreView' using 'groupID' into a project (iOS is targeting 17.2 and macOS is targeting 14.1).Build/run the application locally (both production and development environments will work fine), however once the application is live on the AppStore in AppStoreConnect, SubscriptionStoreView no longer shows products and only shows 'Subscription Unavailable' and 'The subscription is unavailable in the current storefront.' - this message is shown live in production for both iOS and macOS targets. There is no log messages shown in the Console that indicate anything going wrong with StoreKit 2, but I haven't made any changes to my code and noticed this first start appearing about 5 days ago.
I expect the subscription store to be visible to all users and for my products to display. My application is live on both the iOS and macOS AppStores, it passed App Review and I have users who have previously been able to subscribe and use my application, I have not pushed any new changes, so something has changed in StoreKit2 which is causing unexpected behaviour and for this error message to display. As 'SubscriptionStoreView' is a view provided by Apple, I'm really not sure on the pathway forward other than going back to StoreKit1 which I really don't want to do.
Is there any further error information that can be provided on what might be causing this and how I can fix it? (I have created a feedback ticket FB13658521)
The "Cancel" button for VNDocumentCameraViewController is not displayed on iPadOS 26. This issue appears to be specific to iPad, as the button appears correctly on iPhone.
Hi,
I have a UIViewController that contains a UITextField I am presenting that view controller inside SwiftUI using a UIViewControllerRepresentable and I am able to interact with the text field fine and the view controller lifecycle executes normally if the representable is not presented on any SwiftUI container that internally uses a scroll view on the other hand if I put the representable view inside a SwiftUI view that has a scroll view internally (when the UIKit hierarchy is generated) the text field does not respond to interaction anymore and the only view controller lifecycle method invoked is the viewDidLoad from my view controller the other methods are not executed.
Anyone knows if this is a bug on SwiftUI or if there is any additional setup necessary for UIViewControllerRepresentables?
Thanks in advance.
Hi Community,
I found an issue and wanted to ask you for confirmation... or help?
(I will, if the issue persists or gets confirmed, of course file a bug report.)
Context/Setup:
macOS 15.5
Xcode 26 Beta 2
iPad Simulator, seems to be any, tested with "Simulator iPad Pro 11-inch (M4)" and "Simulator iPad mini (A17 Pro)" and also two physical iPads (mini and Pro) running iPadOS 26 Beta 2.
Issue:
In our project we are facing a runtime issue.
Condensed down, when there is a storyboard with a UIToolbar (empty or with buttons) AND the project has the new UIDesignRequiresCompatibility set to true AND we run the app on an iPad (physical device or simulator)...
As soon as the storyboard is loaded and about to be displayed the app crashes, console print:
"UIKitCore/UICoreHostingView.swift:54: Fatal error: init(coder:) has not been implemented"
Any iPhone (physical or simulator) works fine. Also with UIDesignRequiresCompatibility set to false it works everywhere including iPads.
Minimum Deployment Target has between iOS 15 to 26 does has no effect on the outcome.
So it seems there is an issue with UIToolbar in Storyboards with UIDesignRequiresCompatibility on iPads.
Did anyone experience the same issue or can confirm it?
Any idea how to solve it?
Thanks a lot!
Hello!
My question is about 1) if we can use any and or all accessibility features within a sandboxed app and 2) what steps we need to take to do so.
Using accessibility permissions, my app was working fine in Xcode. It used NSEvent.addGlobalMonitorForEvents and localMoniter, along with CGEvent.tapCreate. However, after downloading the same app from the App Store, the code was not working. I believe this was due to differences in how permissions for accessibility are managed in Xcode compared to production.
Is it possible for my app to get access to all accessibility features, while being distributed on the App Store though? Do I need to add / request any special entitlements like com.apple.security.accessibility?
Thanks so much for the help. I have done a lot of research on this online but found some conflicting information, so wanted to post here for a clear answer.
Scenario: Typing Chinese Zhuyin “ㄨㄤ” and then selecting the candidate word “王”.
On iOS 18, the delegate (textField:shouldChangeCharactersInRange:replacementString:) is called with:
range: {0, 2}
replacementString: "王"
On iOS 26, the delegate (textField:shouldChangeCharactersInRanges:replacementString:) instead provides:
ranges: [{2, 0}]
replacementString: "王"
This results in inconsistent text input handling compared to earlier system versions.
Implement: Limit user input to a maximum of 100 Chinese characters.
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
if ([textField markedTextRange]) {
return YES;
}
NSString *changedString = [textField.text stringByReplacingCharactersInRange:range withString:string];
if (changedString.length > 100) {
return NO;
}
return YES;
}
Questions:
Is this an intentional change in iOS 26?
If intentional, what is the recommended way to handle such cases in order to support both iOS 18 and iOS 26 consistently?
Topic:
UI Frameworks
SubTopic:
UIKit
Super easy to reproduce.
Swiping to delete on the last remaining item in the list causes an index out of bounds exception. If you have 2 items in your list, it will only happen when you delete the last remaining item.
From my testing, this issue occurs on 18.3.1 and onward (the RC it happens). I didn't test 18.3.0 so it might happen there as well.
The only workarounds I have found is to add a delay before calling my delete function:
OR
to comment out the Toggle.
So it seems as though iOS 18.3.x added a race condition in the way the ForEach accesses the values in its binding.
Another thing to note, this also happens with .swipeActions, EditMode, etc... any of the built in ways to delete an item from a list.
import SwiftUI
struct ContentView: View {
@StateObject var viewModel = ContentViewModel()
var body: some View {
List {
ForEach($viewModel.items) { $item in
HStack {
Image(systemName: "globe")
.imageScale(.large)
.foregroundStyle(.tint)
Text($item.text.wrappedValue)
Spacer()
Toggle(String(""), isOn: $item.isActive)
.labelsHidden()
}
}
.onDelete(perform: delete)
}
}
func delete(at offsets: IndexSet) {
// uncomment task to make code not crash
// Task {
viewModel.deleteItem(at: offsets)
// }
}
}
struct MyItem: Identifiable {
var id: UUID = UUID()
var text: String
var isActive: Bool
}
class ContentViewModel: ObservableObject {
@Published var items: [MyItem] = [MyItem(text: "Hello, world!", isActive: false)]
func deleteItem(at offset: IndexSet) {
items.remove(atOffsets: offset)
}
}
Already filed a feedback in case this is a bug, but posting here in case I'm doing something wrong?
I'd like the search field to automatically be displayed with the keyboard up when the view appears. This sample code works in iOS 18, but it does not work in iOS 26 beta 7
I also tried adding a delay to setting searchIsFocused = true but that did not help
struct ContentView: View {
var body: some View {
NavigationStack {
NavigationLink(destination: ListView()) {
Label("Go to list", systemImage: "list.bullet")
}
}
.ignoresSafeArea()
}
}
struct ListView: View {
@State private var searchText: String = ""
@State private var searchIsPresented: Bool = false
@FocusState private var searchIsFocused: Bool
var body: some View {
ScrollView {
Text("Test")
}
.searchable(text: $searchText, isPresented: $searchIsPresented, placement: .automatic, prompt: "Search")
.searchFocused($searchIsFocused)
.onAppear {
searchIsFocused = true
}
}
}
After upgrading my OS to Tahoe OS , in my application observed that Cmd+V is not working only on runForModalWindow. But menu Edit->Paste and Right click Paste is working on the same screen.
Other screens in the application have no issues with Cmd+V.
Could you please help with this issue why Cmd+V is not working only in this screen.
Thanks,
Sowmya
Topic:
UI Frameworks
SubTopic:
AppKit
In the example below, VoiceOver (in both iOS 18 and 26) reads the text contained within the image after the .accessibilityLabel, introduced by a “beep.”
VoiceOver: Purple rounded square with the word 'Foo' in white letters. Image [beep] foo.
I’d like it to only read the accessibility label. As a developer focused on accessibility, I make sure every image already has an appropriate label, so having iOS read the image text is redundant.
Sample Code
import SwiftUI
struct ContentView: View {
var body: some View {
Image("TextInImage")
.resizable()
.scaledToFit()
.frame(width: 64, height: 64)
.accessibilityLabel("Purple rounded square with the word 'Foo' in white letters.")
}
}
Sample Image
Drop this image in to Assets.xcassets and confirm it's named TextInImage.
Hi everyone,
I’m testing my Catalyst SwiftUI project on iOS 26 / iPadOS 26 / macOS 26. I started with a NavigationSplitView (triple-column) inside a WindowGroup. On iPad it looks great: the toolbar items merge into the navigation bar, with the three traffic lights.
But on Mac Catalyst, the app always reserves a blank safe area below the traffic lights, and places the toolbar on a separate line beneath the title bar. That leaves wasted vertical space I don’t want.
What I expect (based on Apple’s WWDC session “Elevate the design of your iPad app”):
The toolbar should merge into the title bar with the traffic lights, no separate row.
Content should extend into the full height of the window.
What I get on Mac Catalyst:
Title bar + traffic lights at the top.
Then a completely separate toolbar row below it.
Safe area inset prevents my content from reaching the top of the window.
What I’ve tried:
.toolbarRole(.automatic), .editor, .browser → no effect.
Hiding the title bar via titlebar?.titleVisibility = .hidden → removes the text but not the toolbar gap.
Clearing titlebar?.toolbar → no difference.
So far, I can’t find any way to get Catalyst to integrate toolbars into the window chrome the way native SwiftUI on macOS does.
Is this a known limitation of Mac Catalyst, or is there a supported way to achieve the same “inline toolbar with window controls” layout? Switching to a Mac app vs. Catalyst fixes the issue, but I would have a lot more work to do to get the app ready for release, not ideal since it works near perfect on iPad.
Thanks!
Hey there, does someone know why the ContentUnavailableView is behaving differently on iOS 26 than in iOS 18 but the code is the same?
The screenshot is showing the same app deployed using Xcode version 26.0 beta 4 (17A5285i) on iOS 18.5 and on iOS 26.0.
In iOS 26 beta 4 on the right the spacing of the UIBarButtonItem elements does not look good:
The buttons are created like so:
colorButtonText = [[UIBarButtonItem alloc] initWithImage:[UIImage systemImageNamed:@"paintbrush"] style:UIBarButtonItemStylePlain target:self action:@selector(drawingActionColor:)];
//...
[drawingToolbarText setItems:@[colorButtonText, ...]];
Is this a known issue with the current iOS 26? Am I doing something wrong?
I am trying to build a text editor that shrinks to its content size. The closest I have been able to get has been to add the .scrollDisabled(true) and .fixedSize(horizontal: false, vertical: true) modifiers.
This almost achieves what I need. There are two problems though:
long single line text gets cut off at the end
creating line breaks causes the text editor to grow vertically as expected (uncovering the cut off text in point 1 above). However, when you delete the line breaks, the TextEditor does not shrink again.
I have had a radar open for some time: FB13292506. Hopefully opening a thread here will get more visibility.
And here is some sample code to easily reproduce the issue:
import SwiftUI
struct ContentView: View {
@State var text = "[This is some long text that will be cut off at the end of the text editor]"
var body: some View {
TextEditor(text: $text)
.scrollDisabled(true)
.fixedSize(horizontal: false, vertical: true)
}
}
#Preview {
ContentView()
}
Here is a gif of the behavior:
We’ve recently updated our app to adopt the native iOS 26 tab bar. Since then, we’ve started seeing crashes on iOS 26 devices with swift_getObjectType appearing in the stack.
I’ve reviewed the logs in Organizer but couldn’t find anything conclusive. The issue seems isolated to iOS 26 and doesn’t reproduce on earlier versions.
com.grofers.consumer_issue_2cc3a4a209ab2b47bfbdab919a320fa7_crash_session_68148be54ef5441fac56d3138d055bac_DNE_5_v2_stacktrace.txt
Hi Apple Team and community,
We've noticed a change in how UITableView separators are rendered in iOS 26 (tested using Xcode 26.0), and we'd like to confirm if this is an intentional behaviour change or a potential bug.
Issue Description
In a .plain-style UITableView, the top separator line above the first cell in each section is no longer rendered in iOS 26. We've confirmed that this separator is also absent from the view hierarchy.
This issue did not occur in previous iOS versions (e.g., iOS 18), where the top separator above the first cell of a section was rendered as expected.
The issue doesn't occur for UITableView with no sections.
Expected Behavior
When using a .plain style UITableView, the standard top separator should appear above the first cell of each section, as part of the default system rendering.
Actual Behavior
In iOS 26, this top separator is missing, even though the rest of the separators render normally.
Environment
iOS version: iOS 26 (Simulator)
Xcode version: Xcode 26.0
Tested using: UIKit with Swift, both Storyboard and programmatic view setups
Sample app and screenshots:
Drive link: https://drive.google.com/drive/folders/1aoXeFHO_Sya-6Rvp0fZ0s2V4KLQucRMb?usp=sharing
Questions:
Is this a known change in rendering behavior for UITableView in iOS 26?
If not, is anyone else experiencing the same issue? We'd appreciate any insights or potential workarounds to restore the top separator in .plain-style table views.
Any clarification or guidance would be appreciated.
Thanks in advance!
This new modifier is supposedly backported to iOS 17, but on attempting to use it on the latest iOS 18.5, this happens:
Symbol not found: _$s7SwiftUI17EnvironmentValuesV33_navigationIndicatorVisibilityABIAA0G0OvpMV
This happens with any usage of the modifier. An availability check won't save you either.
The cruelest part of this is that I only need the modifier on iOS 26, lmao.
Am I just missing something?
Topic:
UI Frameworks
SubTopic:
SwiftUI