It appears from my testing that the following is true:
If you close all windows of an app, the app terminates entirely. Minimizing the last window sends it into multitasking. This is different from previous behavior and might have implications on your app's logic.
If you close the last window and quickly tap the app icon again, that same window will come back. Waiting a second before tapping the app icon will bring up the main window (likely because by that point the app was terminated and relaunched).
Is this expected behavior? I did not see any announcement of this.
I find this a bit counterintuitive and would presume that closing the last window would just send the app to multitasking, just like previously. Quitting the app should be reserved by swiping up on it in the multitasking UI or with a new context menu command.
UIKit
RSS for tagConstruct and manage graphical, event-driven user interfaces for iOS or tvOS apps using UIKit.
Posts under UIKit tag
200 Posts
Selecting any option will automatically load the page
Post
Replies
Boosts
Views
Activity
I do the majority of my test development on an iPhone 16 Pro in the iOS Simulator. As part of my UI rework to maintain compatibility with iOS 26 I decided to run on an older device with a small screen size for testing. The smallest device that supports iOS 26 is the iPhone SE 2nd Gen and 3rd Gen.
Take a look at the image below:
On the left is the iPhone SE 2nd Gen. On the right iPhone 16 Pro.
It looks like the UITabBar which is from a UITabBarController is sized too tall. The actual Tab Bar itself is 62px while the container that houses it is 83px. Yes there should be some top/bottom space to allow for the Liquid Glass Effect to overlap as it often spills outside it's bounds but this feels like far too much.
Looking at them side by side, the iPhone SE Tab Bar actually takes up more space which is not ideal for users who are working on a smaller screen to begin with and have less real estate.
It looks like the bottom space is allowable room for the 'swipe to dismiss line' however these devices use Touch ID and that line is never present. Feels like the 83px for the Tab Bar should be reduced on these devices to allow for more useable screen real estate. Is this a design oversight as iOS 26 seems to be built predominantly for Face ID Devices? Just wondering if any Apple Design Engineers can chime in to see if this will be addressed in a future beta?
The only way to change it at this stage is with a CGAffineTransform however this does not impact the '_UITabBarContainerWrapperView' that sits behind it.
Also, on that note. The '_UITabBarContainerWrapperView' sometimes seems to be clear and other times displays a solid system background color. Is there anyway to control this? Many of my views both SwiftUI and UIKit have differing behaviour. My understanding is the idea of iOS 26 is for your app's content to be visible behind the Tab Bar, however the content is obscured by '_UITabBarContainerWrapperView' in many of my views and I can not figure out how to change that.
Thanks!
When working with modal sheet views in iOS 26 I animate changes to detent size like this:
if let sheet = self.sheetPresentationController {
let newDetent = 400
sheet.animateChanges {
sheet.invalidateDetents()
sheet.detents = [.custom(resolver: { context in newDetent })]
}
}
What I have found is that when using a Touch ID Device the input detent will be smaller when the system presents it. If I set the detent size to be 400, on an iPhone 16 Pro it will be 400px but on an iPhone SE 2nd Gen it will be 366.
It seems to be consistently 34px shorter on devices with a Touch ID Square Shaped Screen. This 34px corresponds to the bottom safe area. This feels like a bug to me. I would expect the detent size to match what I assign on all devices.
I will monitor if this is fixed in a future beta but it is present as of iOS 26 Beta 5. In the meantime I have built this helper function which will then correctly size it on all devices:
static func getDetent(basedOn inputValue: Double) -> CGFloat {
if let window = UIApplication.shared.windows.first {
if window.safeAreaInsets.bottom > 0 {
// Face ID Device, Bottom Inset of 34
return inputValue
} else {
// Touch ID Device, Bottom Inset of 0
return inputValue + 34
}
} else {
// Fallback, Return Input Value
return inputValue
}
}
This impacts when animating detents as per above but also when presenting a Sheet View for the first time and assigning a custom detent.
Thanks!
The app becomes unresponsive when pushing a new page. The screen is covered by the _UIParallaxOverlayView class, blocking all gestures.
Are there any scenarios where the transition animation might suddenly stop mid-process?
Or could you provide more information to help me troubleshoot this issue?
I noticed:
When the issue occurs, the FromViewController is displayed on the screen. The ToViewController also exists in the view tree, but it's not visible on the screen.
_UIParallaxOverlayView only appears on iOS 18 and above.
The animation appears to be controlled by +[UIView _fluidParallaxTransitionsEnabledWithTraitCollection:], which is _os_feature_enabled_impl("UIKit", "fluid_parallax_transitions"). Reference
In our current code, the properties of XIB controls are added with weak. However, we encounter some crashes due to accessing wild pointers of controls when a memory warning occurs.
Colleagues from our architecture team said that they had specifically consulted Apple's technical staff before, and the reply was that strong should be used for modification, as it would make the memory more stable. They also mentioned that the statement in the official documentation is incorrect and hasn't been updated.
May I ask whether strong or weak should be used for XIB control properties? What is your latest standard answer?
I would like my users to be able to switch to the search tab (in the sidebar) on iPad and immediately start typing. This is not possible. Calling becomeFirstResponder in viewDidLoad and viewWillAppear does not work. Only in viewDidAppear it does, but that comes with a significant delay between switching to the tab and the search field becoming active. Is there something else I can do?
FB19588765
let homeTab = UITab(
title: "Home",
image: UIImage(systemName: "house"),
identifier: "Home"
) { _ in
UINavigationController(rootViewController: ViewController())
}
let searchTab = UISearchTab { _ in
UINavigationController(rootViewController: SearchViewController())
}
let tabBarController = UITabBarController(tabs: [
homeTab, searchTab
])
tabBarController.mode = .tabSidebar
class SearchViewController: UIViewController {
let searchController = UISearchController(searchResultsController: nil)
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = .systemBackground
self.title = "Search"
self.navigationItem.searchController = searchController
self.navigationItem.preferredSearchBarPlacement = .integratedCentered
searchController.becomeFirstResponder() // Does not work.
searchController.searchBar.becomeFirstResponder() // Does not work.
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
searchController.searchBar.becomeFirstResponder() // Does not work.
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
searchController.searchBar.becomeFirstResponder() // Works. But comes with a significant delay.
}
}
The isEnabled property on UITabBarItem no longer disables tab bar items as expected in iOS 26. Setting tabBarItem.isEnabled = false on a view controller has no visual or functional effect - the tab remains interactive and doesn't show the disabled state.
While testing my application on iOS beta 26, I am experiencing issues with the native UISegmentedControl component from UIKit. After implementing the control, I noticed that I am unable to switch to the second segment option—the selection remains fixed on the first segment regardless of user interaction. I have already reviewed the initial configuration of the control, the addition of the segments, and the implementation of the target-action, but the issue persists. I would like to understand what could be causing this behavior and if there are any specific adjustments or workarounds for iOS 26.
I created a minimal application containing only a UISegmentedControl to clearly demonstrate the issue.
After Picture-in-Picture is opened on the camera interface, the custom UI cannot be displayed. Is there any way to make the custom UI visible? If custom UI cannot be displayed, how do teleprompter-type apps in the store manage to show custom teleprompter text within the camera?
We have encountered a problem on iOS 26. When switching to dark mode, the color of all subviews (font color, background color, etc.) of the Sidebar (Primary View) of UISplitViewController will not change. For example, if it is set to the color of UIColor.label, it will always be black and will not be white in dark mode.
On Xcode, just create a UISplitViewController in Storyboard without changing any settings, and run it directly to see the following:
The title of the Navigation Bar defaults to the label color, and it is still black after switching to dark mode.
There is no such problem in the Secondary View or other places.
This problem has occurred since iOS 26 beta 3, and iOS 26 beta 4 is now the same. But beta 1 and beta 2 have no problem.
I'm not sure if this is a bug, or if there is something that needs to be changed to adapt to iOS 26?
When using a custom UIButton as the customView for a UIBarButtonItem in iOS 26, setting the tintColor on the UIBarButtonItem or the button itself does not affect the button’s appearance in the navigation bar. The button displays, but the tint is not applied as expected.
Steps to Reproduce:
Create a new iOS project with a navigation controller.
Use the following code in your view controller:
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .secondarySystemBackground
var configuration = UIButton.Configuration.plain()
configuration.title = "Why Not Tinted...?"
configuration.baseForegroundColor = .systemBlue
configuration.contentInsets = NSDirectionalEdgeInsets(top: 12, leading: 12, bottom: 12, trailing: 12)
let button = UIButton(configuration: configuration)
let rightBarButton = UIBarButtonItem(customView: button)
rightBarButton.tintColor = .green
navigationItem.rightBarButtonItem = rightBarButton
}
}
Expected Result:
The UIButton in the navigation bar should appear green with glass effect, according to the tintColor set on the UIBarButtonItem.
Actual Result:
The UIButton appears, but the tintColor is not applied. Changing the tintColor on either the UIBarButtonItem or the UIButton has no effect on its appearance in the navigation bar.
Environment
• Device: iOS 26 Developer Beta 5 (23A5308g)
• Xcode: 16.3
Short description
The app crashes the moment the user tries to long-press to select text inside a WKWebView, double-tap an image with Text (magnifier appears)
The exception is CALayer position contains NaN. frame = (nan,0;0,48) chorPoint=(inf, 0) and it is thrown in the UI process.
Build & run any project that hosts a WKWebView. Inject the following CSS via script (this is what we do to suppress the native callout menu):
WKWebView *webView = [[WKWebView alloc] initWithFrame:self.view.bounds
configuration:[WKWebViewConfiguration new]];
NSString *js =
@"document.documentElement.style.webkitUserSelect='none';"
"document.documentElement.style.webkitTouchCallout='none';";
[webView evaluateJavaScript:js completionHandler:nil];
[self.view addSubview:webView];
Incident Identifier: EE6FB046-5087-4F15-A72D-A74965347A30
CrashReporter Key: 29e8e58e02a07557adb4ce3f463d764f3ce8bbd5
Hardware Model: iPhone16,1
Process: wallet [642]
Path: /private/var/containers/Bundle/Application/4B4E609A-C8BF-4C56-AB2A-1638249B98A5/wallet.app/wallet
Identifier: xxxx
Version: xxxx
AppStoreTools: 16F7
AppVariant: 1:iPhone16,1:18
Code Type: ARM-64 (Native)
Role: Foreground
Parent Process: launchd [1]
Coalition: xxxxx
Date/Time: 2025-08-06 12:05:24.0732 +0800
Launch Time: 2025-08-06 11:49:40.3802 +0800
OS Version: iPhone OS 26.0 (23A5308g)
Release Type: Beta
Baseband Version: 3.02.02
Report Version: 104
Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Termination Reason: SIGNAL 6 Abort trap: 6
Terminating Process: wallet [642]
Triggered by Thread: 0
Application Specific Information:
abort() called
Last Exception Backtrace:
0 CoreFoundation 0x185e058c8 __exceptionPreprocess + 164
1 libobjc.A.dylib 0x182d797c4 objc_exception_throw + 88
2 CoreFoundation 0x185e908d4 -[NSException initWithCoder:] + 0
3 QuartzCore 0x18678a874 CA::Layer::set_position(CA::Vec2<double> const&, bool) + 160
4 QuartzCore 0x1869a7270 -[CALayer setPosition:] + 52
5 UIKitCore 0x18c4ac564 -[UIView _backing_setPosition:] + 176
6 UIKitCore 0x18cefdf0c -[UIView setCenter:] + 220
7 UIKitCore 0x18cd9f794 -[_UIEditMenuContentPresentation _displayPreparedMenu:titleView:reason:didDismissMenu:configuration:] + 936
8 UIKitCore 0x18cd9f3c0 __54-[_UIEditMenuContentPresentation _displayMenu:reason:]_block_invoke + 104
9 UIKitCore 0x18ced1060 -[UIEditMenuInteraction _editMenuPresentation:preparedMenuForDisplay:completion:] + 384
10 UIKitCore 0x18cd9f2e4 -[_UIEditMenuContentPresentation _displayMenu:reason:] + 304
11 UIKitCore 0x18cd9f0d8 -[_UIEditMenuContentPresentation displayMenu:configuration:] + 64
12 UIKitCore 0x18ced0344 __58-[UIEditMenuInteraction presentEditMenuWithConfiguration:]_block_invoke + 260
13 UIKitCore 0x18ced1f8c __80-[UIEditMenuInteraction _prepareMenuAtLocation:configuration:completionHandler:]_block_invoke + 80
14 UIKitCore 0x18cc8403c __109-[UITextContextMenuInteraction _editMenuInteraction:menuForConfiguration:suggestedActions:completionHandler:]_block_invoke + 180
15 UIKitCore 0x18cc84584 __107-[UITextContextMenuInteraction _querySelectionCommandsForConfiguration:suggestedActions:completionHandler:]_block_invoke + 148
16 WebKit 0x1a05ae5d4 WTF::CompletionHandler<void (WebKit::DocumentEditingContext&&)>::operator()(WebKit::DocumentEditingContext&&) + 64
17 WebKit 0x1a05bb468 WTF::Detail::CallableWrapper<WTF::CompletionHandler<void (IPC::Connection*, IPC::Decoder*)> IPC::Connection::makeAsyncReplyCompletionHandler<Messages::WebPage::RequestDocumentEditingContext, WTF::CompletionHandler<void (WebKit::DocumentEditingContext&&)>>(WTF::CompletionHandler<void (WebKit::DocumentEditingContext&&)>&&, WTF::ThreadLikeAssertion)::'lambda'(IPC::Connection*, IPC::Decoder*), void, IPC::Connection*, IPC::Decoder*>::call(IPC::Connection*, IPC::Decoder*) + 196
18 WebKit 0x19fcf5db8 WTF::Detail::CallableWrapper<WebKit::AuxiliaryProcessProxy::sendMessage(WTF::UniqueRef<IPC::Encoder>&&, WTF::OptionSet<IPC::SendOption>, std::__1::optional<IPC::ConnectionAsyncReplyHandler>, WebKit::AuxiliaryProcessProxy::ShouldStartProcessThrottlerActivity)::$_1, void, IPC::Connection*, IPC::Decoder*>::call(IPC::Connection*, IPC::Decoder*) + 64
19 WebKit 0x19fce54f0 IPC::Connection::dispatchMessage(WTF::UniqueRef<IPC::Decoder>) + 340
20 WebKit 0x19fcf5aa0 IPC::Connection::dispatchIncomingMessages() + 536
21 JavaScriptCore 0x19a8f85d4 WTF::RunLoop::performWork() + 552
22 JavaScriptCore 0x19a8f838c WTF::RunLoop::performWork(void*) + 36
23 CoreFoundation 0x185da6230 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 28
24 CoreFoundation 0x185da61a4 __CFRunLoopDoSource0 + 172
25 CoreFoundation 0x185d83c6c __CFRunLoopDoSources0 + 232
26 CoreFoundation 0x185d598b0 __CFRunLoopRun + 820
27 CoreFoundation 0x185d58c44 _CFRunLoopRunSpecificWithOptions + 532
28 GraphicsServices 0x224ce0498 GSEventRunModal + 120
29 UIKitCore 0x18b6c84b8 -[UIApplication _run] + 792
30 UIKitCore 0x18b66cbc0 UIApplicationMain + 336
31 wallet 0x1046f8558 0x1046f4000 + 17752
32 dyld 0x182dcdb18 start + 6332
When a UISearchController is placed inside a search tab, the scope buttons disappear when dismissing the search bar once. They never return. When using in any regular view controller container, like even another default tab, everything works fine. Is there something I can do to prevent this?
Video: https://mastodon.social/@nicoreese/115017696077771370
FB19587916
let homeTab = UITab(
title: "Home",
image: UIImage(systemName: "house"),
identifier: "Home"
) { _ in
UINavigationController(rootViewController: ViewController())
}
let searchTab = UISearchTab { _ in
UINavigationController(rootViewController: SearchViewController())
}
let tabBarController = UITabBarController(tabs: [
homeTab, searchTab
])
tabBarController.mode = .tabSidebar
class SearchViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = .systemBackground
self.title = "Home"
let searchController = UISearchController(searchResultsController: nil)
searchController.searchBar.scopeButtonTitles = [
"Scope 1", "Scope 2"
]
searchController.searchBar.showsScopeBar = true
self.navigationItem.searchController = searchController
}
}
When using UISearchController, scope buttons never appear. On iPadOS 18 this works fine. This is a showstopper bug for me and my app. Is there anything I can do about it?
Sample project is attached to feedback FB19587622.
Hi team, in iOS latest version 26.0, we are getting searchBar at bottom of the screen. Is there any option to change the position of the search? I need to move it to top as like in previous iOS version.
When a UIPageViewController is pushed in a UINavigationController, the leading swipe action from middle of screen dismisses the PageViewController instead of going to previous page.
When the Example code is opened from Xcode 16.4.0,
✅ Left Swipe action from left screen edge of screen dismisses the Page View Controller.
✅ Left Swipe action from middle of screen goes to previous Page in Page View Controller
When the Example code is opened from Xcode 26.0 - Beta 6,
✅ Left Swipe action from left screen edge of screen dismisses the Page View Controller.
❌ Left Swipe action from middle of screen sometimes goes to previous page and sometimes dismisses the Page View Controller.
Example code that the issue occurs:
import Foundation
import UIKit
import PlaygroundSupport
PlaygroundPage.current.setLiveView(
UINavigationController(rootViewController: RootViewController())
)
class RootViewController: UIViewController {
lazy var pageVCButton: UIButton = {
let button = UIButton()
button.setTitle("Open Page VC", for: .normal)
button.setTitleColor(.label, for: .normal)
button.addAction(UIAction(handler: { [weak self] _ in
self?.didTapPageVCButton()
}), for: .touchUpInside)
return button
}()
lazy var pageContainerViewController = PageContainerViewController(startIndex: 3)
func didTapPageVCButton() {
print("didTapPageVCButton")
navigationController?.pushViewController(pageContainerViewController, animated: true)
}
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .systemBackground
addOpenPageVCButton()
}
private func addOpenPageVCButton() {
view.addSubview(pageVCButton)
pageVCButton.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
pageVCButton.centerXAnchor.constraint(equalTo: view.centerXAnchor),
pageVCButton.centerYAnchor.constraint(equalTo: view.centerYAnchor),
])
}
}
class PageContainerViewController: UIViewController {
lazy var pageViewController: UIPageViewController = {
let pageViewController = UIPageViewController(
transitionStyle: .scroll,
navigationOrientation: .horizontal,
options: nil
)
pageViewController.dataSource = self
pageViewController.delegate = self
return pageViewController
}()
lazy var pages: [ColouredViewController] = [
ColouredViewController(backgroundColor: .red),
ColouredViewController(backgroundColor: .blue),
ColouredViewController(backgroundColor: .green),
ColouredViewController(backgroundColor: .yellow),
ColouredViewController(backgroundColor: .brown),
ColouredViewController(backgroundColor: .link),
ColouredViewController(backgroundColor: .cyan),
]
var startIndex = 0
init(startIndex: Int) {
super.init(nibName: nil, bundle: nil)
self.startIndex = startIndex
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func viewDidLoad() {
super.viewDidLoad()
navigationController?.title = "Page View Controller"
print(pageViewController.gestureRecognizers)
setupPageViewController()
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
}
private func setupPageViewController() {
addChild(pageViewController)
view.addSubview(pageViewController.view)
pageViewController.didMove(toParent: self)
pageViewController.view.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
pageViewController.view.topAnchor.constraint(equalTo: view.topAnchor),
pageViewController.view.bottomAnchor.constraint(equalTo: view.bottomAnchor),
pageViewController.view.leadingAnchor.constraint(equalTo: view.leadingAnchor),
pageViewController.view.trailingAnchor.constraint(equalTo: view.trailingAnchor),
])
pageViewController.setViewControllers([pages[startIndex]], direction: .forward, animated: true)
}
}
extension PageContainerViewController: UIPageViewControllerDataSource {
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
print("Leading Swipe")
guard let viewController = viewController as? ColouredViewController else { return nil }
guard let currentPageIndex = pages.firstIndex(of: viewController) else { return nil }
if currentPageIndex == 0 { return nil }
return pages[currentPageIndex - 1]
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
print("Trailing Swipe")
guard let viewController = viewController as? ColouredViewController else { return nil }
guard let currentPageIndex = pages.firstIndex(of: viewController) else { return nil }
if currentPageIndex == pages.count - 1 { return nil }
return pages[currentPageIndex + 1]
}
}
extension PageContainerViewController: UIPageViewControllerDelegate {}
class ColouredViewController: UIViewController {
var backgroundColor: UIColor?
init(backgroundColor: UIColor) {
super.init(nibName: nil, bundle: nil)
self.backgroundColor = backgroundColor
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = backgroundColor
}
}
We're currently migrating from AppDelegate to UISceneDelegate due to console warnings .
Our application's UI, which is built on a single webpage, functions correctly when launched in the foreground after this migration.
However, we've encountered an issue with partial rendered UI components when launching the application from the background, such as upon receiving a VoIP call.
During a background launch, the following delegate calls occur before the client attempts to load a local webpage:
[08/07 16:25:49:037][ 0x101ea3910]<ALA_SIGNAL>: [OS-PLT] Exit -[AppDelegate application:didFinishLaunchingWithOptions:]
[08/07 16:25:49:084][ 0x10c0c4140]<PushToTalk> [Pushnotif] [] <ALA_SIGNAL>: [OS-CCF] Enter -[PushNotificationManager pushRegistry:didReceiveIncomingPushWithPayload:forType:withCompletionHandler:]
[08/07 16:25:49:098][ 0x101ea3910]Begin -[SceneDelegate scene:willConnectToSession:options:]
[08/07 16:25:49:098][ 0x101ea3910]Exit -[SceneDelegate scene:willConnectToSession:options:]
As part of client login process we load the index page in WebKit here:
[08/07 16:25:50:977][ 0x101ea3910]<ALA_SIGNAL>: [PLT-OS] Enter -[SceneDelegate loadUI:] [UI Launch Reason = 1]
Code:
NSString *path = [[NSBundle mainBundle]pathForResource:@"index" ofType:@"html" inDirectory:@"www"];
NSURL *urlReq = [NSURL fileURLWithPath:path];
[webView loadFileURL:urlReq allowingReadAccessToURL:urlReq];
The problem we're observing is that the webpage is only partially rendering in this background launch scenario (Seen after brought to FG).
Any insights or assistance you can provide would be greatly appreciated.
OS version:15.6 (24G84). mac mini m 4
Xcode:16.4
stack:
Translated Report (Full Report Below)
Process: Xcode [5261]
Path: /Applications/Xcode.app/Contents/MacOS/Xcode
Identifier: com.apple.dt.Xcode
Version: 16.4 (23792)
Build Info: IDEApplication-23792000000000000~2 (16F6)
App Item ID: 497799835
App External ID: 874973124
Code Type: ARM-64 (Native)
Parent Process: launchd [1]
User ID: 501
Date/Time: 2025-08-11 19:57:18.7642 +0800
OS Version: macOS 15.6 (24G84)
Report Version: 12
Anonymous UUID: 314F3813-7BB3-0263-1826-79D64A62D963
Time Awake Since Boot: 700 seconds
System Integrity Protection: enabled
Crashed Thread: 0 Dispatch queue: com.apple.main-thread
Exception Type: EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x0000000000000001, 0x00000001ab5dc1f8
Termination Reason: Namespace SIGNAL, Code 5 Trace/BPT trap: 5
Terminating Process: exc handler [5261]
Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0 libswiftCore.dylib 0x1ab5dc1f8 assertionFailure(:_:file:line:flags:) + 176
1 libswiftCore.dylib 0x1ab64a378 swift_unexpectedError + 656
2 IDEKit 0x108d2edc4 EditorGalleryView.exhibitIdentifiers(in:) + 972
3 IDEKit 0x108d2978c EditorGalleryView.commitState(to:) + 2640
4 IDEKit 0x108d29a64 @objc EditorGalleryView.commitState(to:) + 52
5 DVTFoundation 0x1046fe9d0 -[DVTStateToken _copyStatefulObjectState] + 84
6 DVTFoundation 0x1046feaa8 -[DVTStateToken pushStateToRepositoryAndReturnError:] + 52
7 DVTFoundation 0x10481ab48 -[DVTStateRepository _updateStateIfNeeded] + 232
8 DVTFoundation 0x1046fe9f0 -[DVTStateToken _copyStatefulObjectState] + 116
9 DVTFoundation 0x1046feaa8 -[DVTStateToken pushStateToRepositoryAndReturnError:] + 52
10 DVTFoundation 0x10481ab48 -[DVTStateRepository _updateStateIfNeeded] + 232
11 DVTFoundation 0x1046fe9f0 -[DVTStateToken _copyStatefulObjectState] + 116
12 DVTFoundation 0x1046feb04 -[DVTStateToken _stateDictionary] + 12
13 IDEKit 0x1089a2a38 -[IDEEditorContext _currentHistoryItemAllowingCoalescingAdjustment:] + 508
14 IDEKit 0x10899f11c -[IDEEditorContext willBeginTransactionScopeForNavigableItemCoordinator:] + 332
15 IDEKit 0x1087b3600 __35-[IDENavigableItemCoordinator init]_block_invoke + 148
16 DVTFoundation 0x1047a3ef0 -[DVTObservingBlockToken observeValueForKeyPath:ofObject:change:context:] + 440
17 Foundation 0x19b49c7b4 NSKeyValueNotifyObserver + 252
18 Foundation 0x19b549560 NSKeyValueDidChange + 388
19 Foundation 0x19b48f99c -[NSObject(NSKeyValueObservingPrivate) _changeValueForKeys:count:maybeOldValuesDict:maybeNewValuesDict:usingBlock:] + 760
20 Foundation 0x19b4b805c -[NSObject(NSKeyValueObservingPrivate) _changeValueForKey:key:key:usingBlock:] + 64
21 Foundation 0x19b577434 _NSSetBoolValueAndNotify + 404
22 DVTFoundation 0x104895f18 -[DVTModelGraphTransactionScope _beginTransactionDownward] + 48
23 DVTFoundation 0x104896160 -[DVTModelGraphTransactionScope performTransaction:] + 48
24 DVTFoundation 0x1047a0b30 -[DVTModelObjectGraph performBlockCoalescingModelChanges:] + 136
25 IDEFoundation 0x10d510c80 -[IDEFileReference _invalidateStartingWith:changeBlock:] + 172
26 IDEFoundation 0x10d511c00 -[IDEFileReference discoveredFileDataType] + 300
27 IDEKit 0x1088cda84 -[IDEFileReference(IDEKitFileReferencePropertyAdditions) navigableItem_contentDocumentLocation] + 32
28 IDEKit 0x1089030c0 -[IDEKeyDrivenNavigableItem contentDocumentLocation] + 68
29 IDEKit 0x108a4a644 +[IDENavigableItem _navigableItemForNavigationFromNavigableItem:workspace:] + 80
On iOS 26 not able to control size of UITabBar. Sharing code below.
Colour is applying correctly but somehow _UITabBarPlatterView which turns out as TabBar is not extending; leaving spaces on left, right & bottom sides.
class CustomTabBar: UITabBar {
override init(frame: CGRect) {
super.init(frame: frame)
backgroundColor = .red
let firstItem = UITabBarItem(title: "Home", image: UIImage(systemName: "house"), tag: 0)
let secondItem = UITabBarItem(title: "Search", image: UIImage(systemName: "magnifyingglass"), tag: 1)
let thirdItem = UITabBarItem(title: "Profile", image: UIImage(systemName: "person.circle"), tag: 2)
items = [firstItem, secondItem, thirdItem]
selectedItem = firstItem
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
class ViewController: UIViewController {
let tabBar: CustomTabBar = {
let tb = CustomTabBar()
tb.translatesAutoresizingMaskIntoConstraints = false
return tb
}()
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .systemBackground
view.addSubview(tabBar)
NSLayoutConstraint.activate([
tabBar.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 25),
tabBar.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -25),
tabBar.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor)
])
}
}
when specifying height in CustomTabBar explicitly...
func alignInternalSubViews() {
subviews.forEach { subView in
subView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
subView.topAnchor.constraint(equalTo: topAnchor),
subView.leadingAnchor.constraint(equalTo: leadingAnchor),
subView.trailingAnchor.constraint(equalTo: trailingAnchor),
subView.bottomAnchor.constraint(equalTo: bottomAnchor),
subView.heightAnchor.constraint(equalToConstant: 62)
])
}
}
What should I need to do in order to get this capsule _UITabBarPlatterView and its subviews resize accordingly?