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

Can SwiftUI View Receive a Call When Window Will Close?
I have an NSStatusBar application. This is my first in SwiftUI. And I need to know when the window is closed so that I can disable some of menu commands. I can use NSWindowDelegate with AppDelegate as follows. import SwiftUI @main struct SomeApp: App { @NSApplicationDelegateAdaptor(AppDelegate.self) var appDelegate @StateObject private var menuViewModel = MenuViewModel() var body: some Scene { WindowGroup { ContentView() .environmentObject(menuViewModel) } } } class AppDelegate: NSObject, NSApplicationDelegate, NSWindowDelegate { private var menuViewModel = MenuViewModel() func applicationDidFinishLaunching(_ notification: Notification) { if let window = NSApplication.shared.windows.first { window.setIsVisible(false) window.delegate = self } } func windowWillClose(_ notification: Notification) { menuViewModel.windowClosed = true } } When the window will close, MenuViewModel (ObservableObject) will receive a call, which I want my ContentView to receive. But, so far, it won't. import SwiftUI struct ContentView: View { var body: some View { ZStack { ... ... } .onReceive(statusBarViewModel.$windowClosed) { result in // never called... } } } Can a SwiftUI View receive a call somehow when its window closes? Muchos thankos.
Topic: UI Frameworks SubTopic: SwiftUI Tags:
3
1
656
Jun ’25
iPadOS26: UITabBar doesn't switch selected state
With iPadOS26, if I create a UITabBar, and use that to switch between views, the selected state never updates. I created this simple UIViewController to demonstrate the issue: class SimpleTabBarController: UIViewController, UITabBarDelegate { let tabBar = UITabBar() let redItem = UITabBarItem(title: "Red", image: nil, tag: 0) let blueItem = UITabBarItem(title: "Blue", image: nil, tag: 1) override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = .white tabBar.items = [redItem, blueItem] tabBar.selectedItem = redItem tabBar.delegate = self tabBar.translatesAutoresizingMaskIntoConstraints = false view.addSubview(tabBar) NSLayoutConstraint.activate([ tabBar.leadingAnchor.constraint(equalTo: view.leadingAnchor), tabBar.trailingAnchor.constraint(equalTo: view.trailingAnchor), tabBar.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor) ]) updateBackground(for: redItem) } func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) { updateBackground(for: item) } private func updateBackground(for item: UITabBarItem) { switch item.tag { case 0: view.backgroundColor = .systemRed case 1: view.backgroundColor = .systemBlue default: view.backgroundColor = .white } } } The tabBar didSelect item method is called, and the background color gets updated as expected, but the selected state of the UITabBar stays the same. I files a feedback for a related issue: FB17841678
1
0
315
Jun ’25
How to achieve a pure backdrop blur effect without predefined tint color in SwiftUI / UIKit?
Hi everyone, I’m currently trying to create a pure backdrop blur effect in my iOS app (SwiftUI / UIKit), similar to the backdrop-filter: blur(20px) effect in CSS. My goal is simple: • Apply a Gaussian blur (radius ~20px) to the background content • Overlay a semi-transparent black layer (opacity 0.3) • Avoid any predefined color tint from UIBlurEffect or .ultraThinMaterial, etc. However, every method I’ve tried so far (e.g., .ultraThinMaterial, UIBlurEffect(style:)) always introduces a built-in tint, which makes the result look gray or washed out. Even when layering a black color with opacity 0.3 over .ultraThinMaterial, it doesn’t give the clean, transparent-black + blur look I want. What I’m looking for: • A clean 20px blur effect (like CIGaussianBlur) • No color shift/tint added by default • A layer of black at 30% opacity on top of the blur • Ideally works live (not a static snapshot blur) Has anyone achieved something like this in UIKit or SwiftUI? Would really appreciate any insights, workarounds, or libraries that can help. Thanks in advance! Ben
3
0
224
Jun ’25
Live Activity fails to start with "unsupportedTarget" error on iOS 18 beta
Hi all, I’m developing a timer app with Live Activity support. On iOS 18.5 (iPhone 14 Pro Max), I cannot get Live Activity to start. When I call Activity.request(...) in my main app, it throws an unsupportedTarget error, and nothing appears on the Lock Screen or Dynamic Island. What I’ve done: Widget Extension Info.plist: <key>NSExtension</key> <dict> <key>NSExtensionPointIdentifier</key> <string>com.apple.widgetkit-extension</string> </dict> <key>NSSupportsLiveActivities</key> <true/> <key>NSSupportsLiveActivitiesFrequentUpdates</key> <true/> Live Activity UI: Implemented with ActivityConfiguration(for: xxx_Clock_liveactivitiesAttributes.self) and Dynamic Island support. App Group: Both main app and extension use the same App Group, and it’s enabled in Apple Developer Center and Xcode. Tested on: iPhone 14 Pro Max, iOS 18.5 (official release) Xcode [your version] (I have not tested on iOS 17.x, so I am not sure if this issue is specific to iOS 18.5.) What I’ve tried: Cleaned build folder, deleted Derived Data, uninstalled and reinstalled app. Rebooted device. Double-checked all Info.plist and entitlements settings. Tried creating a new Widget Extension from scratch. Problem: Activity.request always throws unsupportedTarget. No Live Activity appears on Lock Screen or Dynamic Island. No other errors or crashes. Questions: Has anyone encountered this issue on iOS 18.5? Are there any new requirements or changes for Live Activity in iOS 18.5? Any suggestions or workarounds to make Live Activity work? Any help or suggestions would be greatly appreciated!
2
0
249
Jun ’25
Shouldn't SwiftUI only re-renders if var is used on view?
Why is the SwiftUI re-render the UI event if the view does not use the counter like in the example bellow...shouldn't SwiftUI framework be smart enough to detect that?? import SwiftUI class ViewModel: ObservableObject { @Published var counter: Int = 0 // Not used in the view's body @Published var displayText: String = "Hello" // Used in the view's body } struct ContentView: View { @StateObject private var viewModel = ViewModel() var body: some View { VStack { Text(viewModel.displayText) // Depends on displayText } .onChange(of: viewModel.counter) { newValue in print("Counter changed to: \(newValue)") } } } Is there any solution more elegant without using Publishers??
2
0
211
Jun ’25
App Clip links encoded as a QR Code do not load when scanned on an iPhone camera
Using an App Clip link encoded into a QR Code shows an error when scanning the encoded QR Code on an iPhone or iPad. After being scanned, the App Clip's banner is visible, but a message says: "App Clip Unavailable". Accessing the same App Clip URL via Safari works as expected. I've filed a feedback with more details and screenshots of the issue here: FB17891015 Thanks!
2
4
294
Jun ’25
How does Appintent independently display icons
There are hundreds of functions in my project that require creating shortcuts, but AppShortcutsProvider only supports up to 10 AppShortcut declarations, so I used over 100 AppIntents for users to manually add shortcuts (I did not add them to AppShortcutsProvider); The problem now is that I hope all the AppIntents I declare have specific names and function icons. I have tried my best to configure AppIntents with the query document, but the default display in the shortcut app is the icon of this application instead of the function icon I set. My code is as follows: struct ResizeImageIntent: AppIntent { static var title: LocalizedStringResource = "修改图片尺寸" static var description: IntentDescription = IntentDescription("快速打开修改图片尺寸功能") static var openAppWhenRun: Bool = true func perform() async throws -> some IntentResult { if let url = URL(string: "toolbox://resizeimage") { await UIApplication.shared.open(url) } return .result() } } The following is the code with icon configuration added: struct VideoParseIntent: AppIntent { static var title: LocalizedStringResource = "万能解析" static var description: IntentDescription = IntentDescription("快速打开万能解析功能") static var openAppWhenRun: Bool = true // 修正:返回AppShortcut数组 static var appShortcuts: [AppShortcut] { [ AppShortcut( intent: VideoParseIntent(), phrases: ["使用万能解析"], systemImageName: "play.rectangle.on.rectangle" // 系统内置图标 ) ] } func perform() async throws -> some IntentResult { if let url = URL(string: "toolbox://videoparse") { await UIApplication.shared.open(url) } return .result() } }
Topic: UI Frameworks SubTopic: SwiftUI
1
0
132
Jun ’25
Charts - Exclude dates on x-axis
Hi! I'm building an app that uses Swift Charts to visualize stock market data, and I'm encountering a couple of issues. The stock API I’m using provides data only for the trading days when the market is open. The problem is that I need to skip over the missing dates (non-trading days) in the chart, but still keep the x-axis formatted correctly (e.g., group ticks by month). If I convert the dates to String to handle missing data, I lose the correct x-axis formatting, and the date labels become inaccurate among with its data. Here’s som of the code I’m using for parsing the dates and structuring the data: struct StockDataPoint: Identifiable, Decodable { var id: String { datetime } let datetime: String let close: String var date: Date { datetime.toDate() ?? Date() } var closePrice: Double { Double(close) ?? 0.0 } } extension String { func toDate() -> Date? { let formatter = DateFormatter() formatter.locale = Locale(identifier: "en_US_POSIX") formatter.timeZone = TimeZone(abbreviation: "UTC") formatter.dateFormat = self.count == 10 ? "yyyy-MM-dd" : "yyyy-MM-dd HH:mm:ss" return formatter.date(from: self) } } And: LineMark( x: .value("Datum", point.date), y: .value("Pris", point.closePrice) ) .interpolationMethod(.cardinal) .lineStyle(StrokeStyle(lineWidth: 0.7)) .foregroundStyle(.linearGradient(colors: [.blue, .yellow, .orange], startPoint: .bottomTrailing, endPoint: .topLeading)) .frame(height: 300) .background(Color.black.opacity(0.6)) .chartYScale( domain: ( (stockAPI.stockData.map { $0.closePrice }.min() ?? 0) * 0.98 ... (stockAPI.stockData.map { $0.closePrice }.max() ?? 100) * 1.02 ) ) .chartXAxis { AxisMarks(values: .automatic(desiredCount: 5)) { value in AxisGridLine().foregroundStyle(Color.gray.opacity(0.5)) AxisTick().foregroundStyle(Color.gray) AxisValueLabel().foregroundStyle(Color.gray) } } .chartYAxis { AxisMarks(values: .automatic(desiredCount: 5)) { value in AxisGridLine().foregroundStyle(Color.gray.opacity(0.5)) AxisTick().foregroundStyle(Color.gray) AxisValueLabel().foregroundStyle(Color.gray) } } What I need help with: Skipping missing dates on the x-axis and show correct data for corresponding days. Keeping the x-axis well formatted (grouped by month, accurate labels). Thanks in advance for any suggestions!
2
0
188
Jun ’25
How to display numbers as grid marks along axes for plotting in Swift Charts?
If you try to add a graph for a function in Apple Notes you can see that numbers marking coordinates are positioned along the axes (see screenshot 1). But when I am making my own plot view with Swift Charts I don't see that option. Marks for X axis are positioned at the bottom, and marks for Y axis are positioned to the right. I don't see an API that can configure them to be shown along the axes. Is there something that I am missing? Or is Apple just using some private API for that? I could make a custom overlay to display these marks, but then I will have to adjust them while zooming myself, which can be problematic.
1
0
245
Jun ’25
Swift Charts: How to prevent scroll position jump when loading more data dynamically
I'm implementing infinite scrolling with Swift Charts where additional historical data loads when scrolling near the beginning of the dataset. However, when new data is loaded, the chart's scroll position jumps unexpectedly. Current behavior: Initially loads 10 data points, displaying the latest 5 When scrolling backwards with only 3 points remaining off-screen, triggers loading of 10 more historical points After loading, the scroll position jumps to the 3rd position of the new dataset instead of maintaining the current view Expected behavior: Scroll position should remain stable when new data is loaded User's current view should not change during data loading Here's my implementation logic using some mock data: import SwiftUI import Charts struct DataPoint: Identifiable { let id = UUID() let date: Date let value: Double } class ChartViewModel: ObservableObject { @Published var dataPoints: [DataPoint] = [] private var isLoading = false init() { loadMoreData() } func loadMoreData() { guard !isLoading else { return } isLoading = true let newData = self.generateDataPoints( endDate: self.dataPoints.first?.date ?? Date(), count: 10 ) self.dataPoints.insert(contentsOf: newData, at: 0) self.isLoading = false print("\(dataPoints.count) data points.") } private func generateDataPoints(endDate: Date, count: Int) -> [DataPoint] { var points: [DataPoint] = [] let calendar = Calendar.current for i in 0..<count { let date = calendar.date( byAdding: .day, value: -i, to: endDate ) ?? endDate let value = Double.random(in: 0...100) points.append(DataPoint(date: date, value: value)) } return points.sorted { $0.date < $1.date } } } struct ScrollableChart: View { @StateObject private var viewModel = ChartViewModel() @State private var scrollPosition: Date @State private var scrollDebounceTask: Task<Void, Never>? init() { self.scrollPosition = .now.addingTimeInterval(-4*24*3600) } var body: some View { Chart(viewModel.dataPoints) { point in BarMark( x: .value("Time", point.date, unit: .day), y: .value("Value", point.value) ) } .chartScrollableAxes(.horizontal) .chartXVisibleDomain(length: 5 * 24 * 3600) .chartScrollPosition(x: $scrollPosition) .chartXScale(domain: .automatic(includesZero: false)) .frame(height: 300) .onChange(of: scrollPosition) { oldPosition, newPosition in scrollDebounceTask?.cancel() scrollDebounceTask = Task { try? await Task.sleep(for: .milliseconds(300)) if !Task.isCancelled { checkAndLoadMoreData(currentPosition: newPosition) } } } } private func checkAndLoadMoreData(currentPosition: Date?) { guard let currentPosition, let earliestDataPoint = viewModel.dataPoints.first?.date else { return } let timeInterval = currentPosition.timeIntervalSince(earliestDataPoint) if timeInterval <= 3 * 24 * 3600 { viewModel.loadMoreData() } } } I attempted to compensate for this jump by adding: scrollPosition = scrollPosition.addingTimeInterval(10 * 24 * 3600) after viewModel.loadMoreData(). However, this caused the chart to jump in the opposite direction by 10 days, rather than maintaining the current position. What's the problem with my code and how to fix it?
6
0
624
Jun ’25
AreaMark Always alignsMarkStylesWithPlotArea for linear gradients
I'm trying to make a Swift Chart where 24 AreaMarks an hour apart on X axis over a day display a vertical gradient. The gradient is vertical and is essentially [Color.opacity(0.1),Colour,Color.opacity(0.1] The idea here is where the upper and lower points of each AreaMark are the same or close to each other in the Y axis, the chart essentially displays a line, where they are far apart you get a nice fading vertical gradient. However, it seems that the .alignsMarkStylesWithPlotArea modifier is always set for AreaMarks even if manually applying it false. Investigating further, I've learnt that with AreaMarks in a series, Swift Charts seems to only listen to the first foreground style set in. I've created some sample code to demonstrate this. struct DemoChartView: View { var body: some View { Chart { AreaMark(x: .value("Time", Date().addingTimeInterval(0)), yStart: .value("1", 40), yEnd: .value("2", 60)) .foregroundStyle(LinearGradient(colors: [.pink, .teal], startPoint: .top, endPoint: .bottom)) .alignsMarkStylesWithPlotArea(false) AreaMark(x: .value("Time", Date().addingTimeInterval(3600)), yStart: .value("1", 44), yEnd: .value("2", 58)) .foregroundStyle(LinearGradient(colors: [.orange, .yellow], startPoint: .top, endPoint: .bottom)) .alignsMarkStylesWithPlotArea(false) AreaMark(x: .value("Time", Date().addingTimeInterval(03600*2)), yStart: .value("1", 50), yEnd: .value("2", 90)) .foregroundStyle(LinearGradient(colors: [.green, .blue], startPoint: .top, endPoint: .bottom)) .alignsMarkStylesWithPlotArea(false) } } } Which produces this: So here, all the different .foregroundStyle LinearGradients are being ignored AND the .alignsMarkStylesWithPlotArea(false) is also ignored - the amount of pink on the first mark is different to the second and third 🤷‍♂️ Has anyone encountered this. Are AreaMarks the correct choice or are they just not setup to create this type of data display. Thanks
3
0
986
Jun ’25
iOS26 WWDC25 large inline navigation?
How to achieve the same navigation bar style as in the Design foundations from idea to interface - WWDC25 video? Screenshot: https://imgur.com/a/huzsm1H There's no new navigationBarTitleDisplayMode that has action buttons aligned with the title.
1
0
214
Jun ’25
Xcode 26, macOS 26, attempting to use alternate dock icons
I have added multiple status icons to my project, in the form of .icon files created with Icon Composer. The main app icon works, but the status icons are not working. I am attempting to load the images from the asset catalog using NSImage imageNamed:, and apply them to the NSApp dockTile using NSGlassEffectContainerView. I don't even know if that attempt is going to work, as I never get past the stage of NSImage loading the icons. Maybe someone on the forums knows what to do there? I'd be willing to use one of my coding support incidents to work through this if necessary, as my two incidents will expire as my subscription rolls over in August anyway. My project lives at https://github.com/losnoco/cog/, and the Tahoe attempt WIP lives in the wip.tahoe branch, with the latest commit as of this post being the attempt to adapt the Dock Icon generation. I'd love to know if I can adapt this easily. I'm also still trying to support existing non-Glass custom .png icons the user can add to their profile folder with buttons in the preferences, as well as supporting legacy status icons on pre-Tahoe installs. I also try to add a progress bar to the dock tile view when the app is processing something at length.
Topic: UI Frameworks SubTopic: AppKit Tags:
0
1
279
Jun ’25
Grid right to left
Hi, I’d like to display items in a grid from right to left. Like the image: Is this possible with a grid? What would be the best approach in terms of performance?
Replies
1
Boosts
0
Views
100
Activity
Jun ’25
Can SwiftUI View Receive a Call When Window Will Close?
I have an NSStatusBar application. This is my first in SwiftUI. And I need to know when the window is closed so that I can disable some of menu commands. I can use NSWindowDelegate with AppDelegate as follows. import SwiftUI @main struct SomeApp: App { @NSApplicationDelegateAdaptor(AppDelegate.self) var appDelegate @StateObject private var menuViewModel = MenuViewModel() var body: some Scene { WindowGroup { ContentView() .environmentObject(menuViewModel) } } } class AppDelegate: NSObject, NSApplicationDelegate, NSWindowDelegate { private var menuViewModel = MenuViewModel() func applicationDidFinishLaunching(_ notification: Notification) { if let window = NSApplication.shared.windows.first { window.setIsVisible(false) window.delegate = self } } func windowWillClose(_ notification: Notification) { menuViewModel.windowClosed = true } } When the window will close, MenuViewModel (ObservableObject) will receive a call, which I want my ContentView to receive. But, so far, it won't. import SwiftUI struct ContentView: View { var body: some View { ZStack { ... ... } .onReceive(statusBarViewModel.$windowClosed) { result in // never called... } } } Can a SwiftUI View receive a call somehow when its window closes? Muchos thankos.
Topic: UI Frameworks SubTopic: SwiftUI Tags:
Replies
3
Boosts
1
Views
656
Activity
Jun ’25
iPadOS26: UITabBar doesn't switch selected state
With iPadOS26, if I create a UITabBar, and use that to switch between views, the selected state never updates. I created this simple UIViewController to demonstrate the issue: class SimpleTabBarController: UIViewController, UITabBarDelegate { let tabBar = UITabBar() let redItem = UITabBarItem(title: "Red", image: nil, tag: 0) let blueItem = UITabBarItem(title: "Blue", image: nil, tag: 1) override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = .white tabBar.items = [redItem, blueItem] tabBar.selectedItem = redItem tabBar.delegate = self tabBar.translatesAutoresizingMaskIntoConstraints = false view.addSubview(tabBar) NSLayoutConstraint.activate([ tabBar.leadingAnchor.constraint(equalTo: view.leadingAnchor), tabBar.trailingAnchor.constraint(equalTo: view.trailingAnchor), tabBar.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor) ]) updateBackground(for: redItem) } func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) { updateBackground(for: item) } private func updateBackground(for item: UITabBarItem) { switch item.tag { case 0: view.backgroundColor = .systemRed case 1: view.backgroundColor = .systemBlue default: view.backgroundColor = .white } } } The tabBar didSelect item method is called, and the background color gets updated as expected, but the selected state of the UITabBar stays the same. I files a feedback for a related issue: FB17841678
Replies
1
Boosts
0
Views
315
Activity
Jun ’25
How to achieve a pure backdrop blur effect without predefined tint color in SwiftUI / UIKit?
Hi everyone, I’m currently trying to create a pure backdrop blur effect in my iOS app (SwiftUI / UIKit), similar to the backdrop-filter: blur(20px) effect in CSS. My goal is simple: • Apply a Gaussian blur (radius ~20px) to the background content • Overlay a semi-transparent black layer (opacity 0.3) • Avoid any predefined color tint from UIBlurEffect or .ultraThinMaterial, etc. However, every method I’ve tried so far (e.g., .ultraThinMaterial, UIBlurEffect(style:)) always introduces a built-in tint, which makes the result look gray or washed out. Even when layering a black color with opacity 0.3 over .ultraThinMaterial, it doesn’t give the clean, transparent-black + blur look I want. What I’m looking for: • A clean 20px blur effect (like CIGaussianBlur) • No color shift/tint added by default • A layer of black at 30% opacity on top of the blur • Ideally works live (not a static snapshot blur) Has anyone achieved something like this in UIKit or SwiftUI? Would really appreciate any insights, workarounds, or libraries that can help. Thanks in advance! Ben
Replies
3
Boosts
0
Views
224
Activity
Jun ’25
How to display such a window in a mixed space
I saw this demo on the website. Do you have the address for the demo? If not, how is the following image content implemented? Can you tell me which style of WindowGroup is used to create this custom window, and the buttons to move and close the window are located at the bottom of the menu bar. Thank you, thank [you]
Replies
1
Boosts
0
Views
143
Activity
Jun ’25
Live Activity fails to start with "unsupportedTarget" error on iOS 18 beta
Hi all, I’m developing a timer app with Live Activity support. On iOS 18.5 (iPhone 14 Pro Max), I cannot get Live Activity to start. When I call Activity.request(...) in my main app, it throws an unsupportedTarget error, and nothing appears on the Lock Screen or Dynamic Island. What I’ve done: Widget Extension Info.plist: <key>NSExtension</key> <dict> <key>NSExtensionPointIdentifier</key> <string>com.apple.widgetkit-extension</string> </dict> <key>NSSupportsLiveActivities</key> <true/> <key>NSSupportsLiveActivitiesFrequentUpdates</key> <true/> Live Activity UI: Implemented with ActivityConfiguration(for: xxx_Clock_liveactivitiesAttributes.self) and Dynamic Island support. App Group: Both main app and extension use the same App Group, and it’s enabled in Apple Developer Center and Xcode. Tested on: iPhone 14 Pro Max, iOS 18.5 (official release) Xcode [your version] (I have not tested on iOS 17.x, so I am not sure if this issue is specific to iOS 18.5.) What I’ve tried: Cleaned build folder, deleted Derived Data, uninstalled and reinstalled app. Rebooted device. Double-checked all Info.plist and entitlements settings. Tried creating a new Widget Extension from scratch. Problem: Activity.request always throws unsupportedTarget. No Live Activity appears on Lock Screen or Dynamic Island. No other errors or crashes. Questions: Has anyone encountered this issue on iOS 18.5? Are there any new requirements or changes for Live Activity in iOS 18.5? Any suggestions or workarounds to make Live Activity work? Any help or suggestions would be greatly appreciated!
Replies
2
Boosts
0
Views
249
Activity
Jun ’25
Shouldn't SwiftUI only re-renders if var is used on view?
Why is the SwiftUI re-render the UI event if the view does not use the counter like in the example bellow...shouldn't SwiftUI framework be smart enough to detect that?? import SwiftUI class ViewModel: ObservableObject { @Published var counter: Int = 0 // Not used in the view's body @Published var displayText: String = "Hello" // Used in the view's body } struct ContentView: View { @StateObject private var viewModel = ViewModel() var body: some View { VStack { Text(viewModel.displayText) // Depends on displayText } .onChange(of: viewModel.counter) { newValue in print("Counter changed to: \(newValue)") } } } Is there any solution more elegant without using Publishers??
Replies
2
Boosts
0
Views
211
Activity
Jun ’25
iOS 26: How to achieve TabView effect like in the Find My app.
I noticed on the Find My app in the new iOS 26 beta that the TabView and the sheet seem to be part of the same view. When you collapse the sheet, the TabView is still visible, and you can swipe up to view the sheet again. Is there a way to recreate this effect? Preferably in SwiftUI, but UIKit works too.
Replies
1
Boosts
1
Views
288
Activity
Jun ’25
Xcode26.0 beta has a compilation error
The swift syntax compilation reported an error. as follows How should I be compatible
Replies
2
Boosts
0
Views
130
Activity
Jun ’25
App Clip links encoded as a QR Code do not load when scanned on an iPhone camera
Using an App Clip link encoded into a QR Code shows an error when scanning the encoded QR Code on an iPhone or iPad. After being scanned, the App Clip's banner is visible, but a message says: "App Clip Unavailable". Accessing the same App Clip URL via Safari works as expected. I've filed a feedback with more details and screenshots of the issue here: FB17891015 Thanks!
Replies
2
Boosts
4
Views
294
Activity
Jun ’25
Found a bug in ios26 UI on iphone 12
In keyboard shortcuts this buttons at the bottom are overlappin. Any one else?
Topic: UI Frameworks SubTopic: General
Replies
0
Boosts
0
Views
85
Activity
Jun ’25
How does Appintent independently display icons
There are hundreds of functions in my project that require creating shortcuts, but AppShortcutsProvider only supports up to 10 AppShortcut declarations, so I used over 100 AppIntents for users to manually add shortcuts (I did not add them to AppShortcutsProvider); The problem now is that I hope all the AppIntents I declare have specific names and function icons. I have tried my best to configure AppIntents with the query document, but the default display in the shortcut app is the icon of this application instead of the function icon I set. My code is as follows: struct ResizeImageIntent: AppIntent { static var title: LocalizedStringResource = "修改图片尺寸" static var description: IntentDescription = IntentDescription("快速打开修改图片尺寸功能") static var openAppWhenRun: Bool = true func perform() async throws -> some IntentResult { if let url = URL(string: "toolbox://resizeimage") { await UIApplication.shared.open(url) } return .result() } } The following is the code with icon configuration added: struct VideoParseIntent: AppIntent { static var title: LocalizedStringResource = "万能解析" static var description: IntentDescription = IntentDescription("快速打开万能解析功能") static var openAppWhenRun: Bool = true // 修正:返回AppShortcut数组 static var appShortcuts: [AppShortcut] { [ AppShortcut( intent: VideoParseIntent(), phrases: ["使用万能解析"], systemImageName: "play.rectangle.on.rectangle" // 系统内置图标 ) ] } func perform() async throws -> some IntentResult { if let url = URL(string: "toolbox://videoparse") { await UIApplication.shared.open(url) } return .result() } }
Topic: UI Frameworks SubTopic: SwiftUI
Replies
1
Boosts
0
Views
132
Activity
Jun ’25
Charts - Exclude dates on x-axis
Hi! I'm building an app that uses Swift Charts to visualize stock market data, and I'm encountering a couple of issues. The stock API I’m using provides data only for the trading days when the market is open. The problem is that I need to skip over the missing dates (non-trading days) in the chart, but still keep the x-axis formatted correctly (e.g., group ticks by month). If I convert the dates to String to handle missing data, I lose the correct x-axis formatting, and the date labels become inaccurate among with its data. Here’s som of the code I’m using for parsing the dates and structuring the data: struct StockDataPoint: Identifiable, Decodable { var id: String { datetime } let datetime: String let close: String var date: Date { datetime.toDate() ?? Date() } var closePrice: Double { Double(close) ?? 0.0 } } extension String { func toDate() -> Date? { let formatter = DateFormatter() formatter.locale = Locale(identifier: "en_US_POSIX") formatter.timeZone = TimeZone(abbreviation: "UTC") formatter.dateFormat = self.count == 10 ? "yyyy-MM-dd" : "yyyy-MM-dd HH:mm:ss" return formatter.date(from: self) } } And: LineMark( x: .value("Datum", point.date), y: .value("Pris", point.closePrice) ) .interpolationMethod(.cardinal) .lineStyle(StrokeStyle(lineWidth: 0.7)) .foregroundStyle(.linearGradient(colors: [.blue, .yellow, .orange], startPoint: .bottomTrailing, endPoint: .topLeading)) .frame(height: 300) .background(Color.black.opacity(0.6)) .chartYScale( domain: ( (stockAPI.stockData.map { $0.closePrice }.min() ?? 0) * 0.98 ... (stockAPI.stockData.map { $0.closePrice }.max() ?? 100) * 1.02 ) ) .chartXAxis { AxisMarks(values: .automatic(desiredCount: 5)) { value in AxisGridLine().foregroundStyle(Color.gray.opacity(0.5)) AxisTick().foregroundStyle(Color.gray) AxisValueLabel().foregroundStyle(Color.gray) } } .chartYAxis { AxisMarks(values: .automatic(desiredCount: 5)) { value in AxisGridLine().foregroundStyle(Color.gray.opacity(0.5)) AxisTick().foregroundStyle(Color.gray) AxisValueLabel().foregroundStyle(Color.gray) } } What I need help with: Skipping missing dates on the x-axis and show correct data for corresponding days. Keeping the x-axis well formatted (grouped by month, accurate labels). Thanks in advance for any suggestions!
Replies
2
Boosts
0
Views
188
Activity
Jun ’25
How to display numbers as grid marks along axes for plotting in Swift Charts?
If you try to add a graph for a function in Apple Notes you can see that numbers marking coordinates are positioned along the axes (see screenshot 1). But when I am making my own plot view with Swift Charts I don't see that option. Marks for X axis are positioned at the bottom, and marks for Y axis are positioned to the right. I don't see an API that can configure them to be shown along the axes. Is there something that I am missing? Or is Apple just using some private API for that? I could make a custom overlay to display these marks, but then I will have to adjust them while zooming myself, which can be problematic.
Replies
1
Boosts
0
Views
245
Activity
Jun ’25
Using multiple Line Styles on a single Line Mark
Hello, I am wondering if it is possible to have a Line Mark with different line styles. I am trying to create a Line Mark where part of the line is solid and another part of the line is dashed. Even with a conditional it only displays one or the other. Is it currently possible in SwiftCharts to do something like the attached image? Thank you.
Replies
1
Boosts
1
Views
206
Activity
Jun ’25
Swift Charts: How to prevent scroll position jump when loading more data dynamically
I'm implementing infinite scrolling with Swift Charts where additional historical data loads when scrolling near the beginning of the dataset. However, when new data is loaded, the chart's scroll position jumps unexpectedly. Current behavior: Initially loads 10 data points, displaying the latest 5 When scrolling backwards with only 3 points remaining off-screen, triggers loading of 10 more historical points After loading, the scroll position jumps to the 3rd position of the new dataset instead of maintaining the current view Expected behavior: Scroll position should remain stable when new data is loaded User's current view should not change during data loading Here's my implementation logic using some mock data: import SwiftUI import Charts struct DataPoint: Identifiable { let id = UUID() let date: Date let value: Double } class ChartViewModel: ObservableObject { @Published var dataPoints: [DataPoint] = [] private var isLoading = false init() { loadMoreData() } func loadMoreData() { guard !isLoading else { return } isLoading = true let newData = self.generateDataPoints( endDate: self.dataPoints.first?.date ?? Date(), count: 10 ) self.dataPoints.insert(contentsOf: newData, at: 0) self.isLoading = false print("\(dataPoints.count) data points.") } private func generateDataPoints(endDate: Date, count: Int) -> [DataPoint] { var points: [DataPoint] = [] let calendar = Calendar.current for i in 0..<count { let date = calendar.date( byAdding: .day, value: -i, to: endDate ) ?? endDate let value = Double.random(in: 0...100) points.append(DataPoint(date: date, value: value)) } return points.sorted { $0.date < $1.date } } } struct ScrollableChart: View { @StateObject private var viewModel = ChartViewModel() @State private var scrollPosition: Date @State private var scrollDebounceTask: Task<Void, Never>? init() { self.scrollPosition = .now.addingTimeInterval(-4*24*3600) } var body: some View { Chart(viewModel.dataPoints) { point in BarMark( x: .value("Time", point.date, unit: .day), y: .value("Value", point.value) ) } .chartScrollableAxes(.horizontal) .chartXVisibleDomain(length: 5 * 24 * 3600) .chartScrollPosition(x: $scrollPosition) .chartXScale(domain: .automatic(includesZero: false)) .frame(height: 300) .onChange(of: scrollPosition) { oldPosition, newPosition in scrollDebounceTask?.cancel() scrollDebounceTask = Task { try? await Task.sleep(for: .milliseconds(300)) if !Task.isCancelled { checkAndLoadMoreData(currentPosition: newPosition) } } } } private func checkAndLoadMoreData(currentPosition: Date?) { guard let currentPosition, let earliestDataPoint = viewModel.dataPoints.first?.date else { return } let timeInterval = currentPosition.timeIntervalSince(earliestDataPoint) if timeInterval <= 3 * 24 * 3600 { viewModel.loadMoreData() } } } I attempted to compensate for this jump by adding: scrollPosition = scrollPosition.addingTimeInterval(10 * 24 * 3600) after viewModel.loadMoreData(). However, this caused the chart to jump in the opposite direction by 10 days, rather than maintaining the current position. What's the problem with my code and how to fix it?
Replies
6
Boosts
0
Views
624
Activity
Jun ’25
AreaMark Always alignsMarkStylesWithPlotArea for linear gradients
I'm trying to make a Swift Chart where 24 AreaMarks an hour apart on X axis over a day display a vertical gradient. The gradient is vertical and is essentially [Color.opacity(0.1),Colour,Color.opacity(0.1] The idea here is where the upper and lower points of each AreaMark are the same or close to each other in the Y axis, the chart essentially displays a line, where they are far apart you get a nice fading vertical gradient. However, it seems that the .alignsMarkStylesWithPlotArea modifier is always set for AreaMarks even if manually applying it false. Investigating further, I've learnt that with AreaMarks in a series, Swift Charts seems to only listen to the first foreground style set in. I've created some sample code to demonstrate this. struct DemoChartView: View { var body: some View { Chart { AreaMark(x: .value("Time", Date().addingTimeInterval(0)), yStart: .value("1", 40), yEnd: .value("2", 60)) .foregroundStyle(LinearGradient(colors: [.pink, .teal], startPoint: .top, endPoint: .bottom)) .alignsMarkStylesWithPlotArea(false) AreaMark(x: .value("Time", Date().addingTimeInterval(3600)), yStart: .value("1", 44), yEnd: .value("2", 58)) .foregroundStyle(LinearGradient(colors: [.orange, .yellow], startPoint: .top, endPoint: .bottom)) .alignsMarkStylesWithPlotArea(false) AreaMark(x: .value("Time", Date().addingTimeInterval(03600*2)), yStart: .value("1", 50), yEnd: .value("2", 90)) .foregroundStyle(LinearGradient(colors: [.green, .blue], startPoint: .top, endPoint: .bottom)) .alignsMarkStylesWithPlotArea(false) } } } Which produces this: So here, all the different .foregroundStyle LinearGradients are being ignored AND the .alignsMarkStylesWithPlotArea(false) is also ignored - the amount of pink on the first mark is different to the second and third 🤷‍♂️ Has anyone encountered this. Are AreaMarks the correct choice or are they just not setup to create this type of data display. Thanks
Replies
3
Boosts
0
Views
986
Activity
Jun ’25
UI Scene
What is UI Scene lifecycle all about? Where is more information about this?
Topic: UI Frameworks SubTopic: UIKit
Replies
1
Boosts
0
Views
98
Activity
Jun ’25
iOS26 WWDC25 large inline navigation?
How to achieve the same navigation bar style as in the Design foundations from idea to interface - WWDC25 video? Screenshot: https://imgur.com/a/huzsm1H There's no new navigationBarTitleDisplayMode that has action buttons aligned with the title.
Replies
1
Boosts
0
Views
214
Activity
Jun ’25
Xcode 26, macOS 26, attempting to use alternate dock icons
I have added multiple status icons to my project, in the form of .icon files created with Icon Composer. The main app icon works, but the status icons are not working. I am attempting to load the images from the asset catalog using NSImage imageNamed:, and apply them to the NSApp dockTile using NSGlassEffectContainerView. I don't even know if that attempt is going to work, as I never get past the stage of NSImage loading the icons. Maybe someone on the forums knows what to do there? I'd be willing to use one of my coding support incidents to work through this if necessary, as my two incidents will expire as my subscription rolls over in August anyway. My project lives at https://github.com/losnoco/cog/, and the Tahoe attempt WIP lives in the wip.tahoe branch, with the latest commit as of this post being the attempt to adapt the Dock Icon generation. I'd love to know if I can adapt this easily. I'm also still trying to support existing non-Glass custom .png icons the user can add to their profile folder with buttons in the preferences, as well as supporting legacy status icons on pre-Tahoe installs. I also try to add a progress bar to the dock tile view when the app is processing something at length.
Topic: UI Frameworks SubTopic: AppKit Tags:
Replies
0
Boosts
1
Views
279
Activity
Jun ’25