Explore the art and science of app design. Discuss user interface (UI) design principles, user experience (UX) best practices, and share design resources and inspiration.

Learn about designing great app and game experiences

Posts under General subtopic

Post

Replies

Boosts

Views

Activity

Should we design for Liquid Glass on visionOS?
Liquid Glass was introduced as a universal design language for all platforms, but isn't supported by visionOS 26 beta. For a small team creating a visionOS app targeted for release in fall 2026, should we focus our design work on Liquid Glass, or for the existing visionOS design language?
Topic: Design SubTopic: General Tags:
1
1
265
Jun ’25
Section Header Overlaps with Cell Text in Plain List Style on iOS 26
Hi everyone, I've noticed that on iOS 26 beta 1 through beta 4, when using a List with the .plain style, the section header overlaps with the cell content below it, as there is no background for the header. This creates a poor visual experience. Additionally, when using NavigationSplitView on iPad, the second column's list always shows this issue. Is this an intentional design change, or just a temporary issue? I haven't found a good workaround so far. Thanks! FB19066489
0
1
599
Jul ’25
SwiftUI Menu label: How to center an icon inside a circle?
Hi Everyone. Can you help me with my settings icon design. I'm trying to create a circular settings button using Menu. My code here: struct MenuView: View { var body: some View { Menu { Text("Hello") Text("How are you") } label: { Image(systemName: "gearshape.fill") .clipShape(Circle()) } .clipShape(Circle()) .padding(.top, 10) .padding(.leading, 20) } } You can see my try, this one looks wrong. It should be like this: Just Circle with setting image inside. Thank you an advance 😭🙏🛐
1
0
522
3w
How to do settings icon for menu in SwiftUI?
Hi everyone. Can you help me with my settings icon design. I`m trying to create circular setting button using Menu. My code here: struct MenuView: View { var body: some View { Menu { Text("Hello") Text("How are you") } label: { Image(systemName: "gearshape.fill") .clipShape(Circle()) } .clipShape(Circle()) .padding(.top, 10) .padding(.leading, 20) } } You can see my try, this one looks wrong. It should be like this: Just Circle with setting image inside. Thank you an advance 😭🙏🛐
1
0
534
3w
Sell UI patent to Apple
I've designed a new UI for phones.. I'd like Apple to look at it and see what they think https://docs.google.com/presentation/d/10QSQvAdRRkL-eA9WRsSEbsL62XIayJ75Mbi93tx92DI/edit?usp=drive_link
Topic: Design SubTopic: General
3
0
793
Jan ’26
Contact UISearchBar missing.
Feedback id: FB16140301 Below are the steps to reproduce the bug in Contacts app. Open Contacts app. Now search for a contact and didSelect that contact. Now slightly hold swipe right(from view's center leading position) as to pop the view but not fully swipe, now release the finger and you can see the back nav bar button missing and tapping the back button position also doesn't perform dismiss action. Now do fully swipe from left to right to dismiss(pop) current view. Here you can see the search bar missing.-> That's the bug.
0
1
184
Jun ’25
CarPlay navigation issue, maximum depth
Hi everyone, I am working on a CarPlay integration, and need open a two level list opened from a root template. However, I am always receiving an error message when opening the 2nd pushed template. To narrow it down not to have an issue with some app specific code I created the CarPlay scene below. I am aware that there is a limit, but two levels I understand are supported on all CarPlay integrations, the maximum seems to be 5. The app is just crashing right after showing the 2nd template. Any ideas? Any hints are much appreciated. Thanks a lot! Regards, Michael class CarPlaySceneDelegate2: UIResponder, CPTemplateApplicationSceneDelegate { // [...] private func createRootTemplate() -> CPListTemplate { let pushToAItem = CPListItem(text: "Push to Template A", detailText: "Level 1 → Level 2") pushToAItem.handler = {[weak self] (pushToAItem, completion) in guard let self = self else { completion() return } self.interfaceController?.pushTemplate( self.pushTemplateA(), animated: true, completion: { (didPresent, error) in completion() } ) } let section = CPListSection(items: [pushToAItem]) let template = CPListTemplate(title: "Root Template", sections: [section]) return template } private func pushTemplateA() -> CPListTemplate { let pushToBItem = CPListItem(text: "Push to Template B", detailText: "Level 2 → Level 3") pushToBItem.handler = {[weak self] (pushToBItem, completion) in guard let self = self else { completion() return } self.interfaceController?.pushTemplate( self.pushTemplateB(), animated: true, completion: { (didPresent, error) in completion() } ) } let backToRootItem = CPListItem(text: "Pop to Root", detailText: "Go back to root") backToRootItem.handler = { [weak self] _, completion in self?.interfaceController?.popToRootTemplate(animated: true, completion: nil) completion(); } let infoItem = CPListItem(text: "Current Depth", detailText: "2 (Template A)") let stackCountItem = CPListItem( text: "Stack Count", detailText: "\((interfaceController?.templates.count ?? 0) + 1)" ) let section = CPListSection(items: [pushToBItem, backToRootItem, infoItem, stackCountItem]) let template = CPListTemplate(title: "Template A", sections: [section]) return template } private func pushTemplateB() -> CPListTemplate { let pushToCItem = CPListItem(text: "Push to Template C", detailText: "Level 3 → Level 4") pushToCItem.handler = {[weak self] (pushToCItem, completion) in guard let self = self else { completion() return } self.interfaceController?.pushTemplate( self.pushTemplateC(), animated: true, completion: { (didPresent, error) in completion() } ) } let backToRootItem = CPListItem(text: "Pop to Root", detailText: "Go back to root") backToRootItem.handler = { [weak self] _, completion in self?.interfaceController?.popToRootTemplate(animated: true, completion: nil) completion() } let popOneItem = CPListItem(text: "Pop One", detailText: "Go back to Template A") popOneItem.handler = { [weak self] _, completion in self?.interfaceController?.popTemplate(animated: true, completion: nil) completion() } let infoItem = CPListItem(text: "Current Depth", detailText: "3 (Template B)") let stackCountItem = CPListItem( text: "Stack Count", detailText: "\((interfaceController?.templates.count ?? 0) + 1)" ) let section = CPListSection(items: [pushToCItem, popOneItem, backToRootItem, infoItem, stackCountItem]) let template = CPListTemplate(title: "Template B", sections: [section]) return template } private func pushTemplateC() -> CPListTemplate { let backToRootItem = CPListItem(text: "Pop to Root", detailText: "Go back to root") backToRootItem.handler = { [weak self] _, completion in self?.interfaceController?.popToRootTemplate(animated: true, completion: nil) completion() } let popOneItem = CPListItem(text: "Pop One", detailText: "Go back to Template B") popOneItem.handler = { [weak self] _, completion in self?.interfaceController?.popTemplate(animated: true, completion: nil) completion() } let infoItem = CPListItem(text: "Current Depth", detailText: "4 (Template C)") let stackCountItem = CPListItem( text: "Stack Count", detailText: "\((interfaceController?.templates.count ?? 0) + 1)" ) let section = CPListSection(items: [popOneItem, backToRootItem, infoItem, stackCountItem]) let template = CPListTemplate(title: "Template C", sections: [section]) return template } }
2
0
1.8k
Jan ’26
@State variable returns empty despite being set in .onAppear function
With the code below, JSON data is parsed and is stored in the variable data in the .onAppear function, however an empty set of data is passed to the Content view. How can that be fixed so that the JSON data passes to the DataView? struct ContentView: View { @State var data: [Data] @State var index: Int = 0 var body: some View { VStack { DataView(data: data[index]) } .onAppear { let filePath = Bundle.main.path(forResource: "data", ofType: "json") let url = URL(fileURLWithPath: filePath!) data = getData(url: url) } } func getData(url: URL) -> [Data] { do { let data = try Data(contentsOf: url) let jsonDecoded = try JSONDecoder().decode([Data].self, from: data) return jsonDecoded } catch let error as NSError { print("Fail: \(error.localizedDescription)") } catch { print("Fail: \(error)") } return [] } }
17
1
560
Aug ’25
Question about the platform parameter in device registration
https://developer.apple.com/documentation/appstoreconnectapi/devicecreaterequest/data-data.dictionary/attributes-data.dictionary According to the API documentation above, the parameter values for platform can be three: IOS, MAC-OS, and UNIVERSAL. After debugging, it was found that IOS and MAC-OS can be used normally, but UNIVERSAL encountered an error UNIVERSAL' is not a valid value for the attribute 'platform'. Expected one of: 'IOS', 'MAC_OS', I would like to know if this value has been deprecated or if the API interface requires new version support, and how to use this value! Please help me solve it! thank you!
Topic: Design SubTopic: General
0
1
330
Aug ’25
Icon Composer missing margins
I'm trying out Icon Composer Version 1.0 (27.4). I imported a simple logo and sized it in the outer circle. The icon appears good in the Icon Composer. But when I export the file and use it for my app icon it seems to be missing a margin or padding that other native application icons have. Am i supposed to be adding my own padding to these resulting icons or am I building them incorrectly? Any guidance would be appreciated. Thanks!
Topic: Design SubTopic: General Tags:
0
1
161
Jun ’25
Icon Composer for visionOS and tvOS
As of right now Icon Composer does not support creating app icons for visionOS and tvOS. It appears that only system apps can provide glass icons for those platforms. How should developers handle this? In extreme cases, the flat icon on those platforms will look wildly different from their glass counterparts. From what I have seen visionOS and tvOS also do not apply any automatic treatment like on iOS where legacy icons get a glass effect. So, third party app icons are just going to look out of place for (hopefully just) a year on those platforms? What is the recommended approach here? You could obviously fake the effect, but I feel like that would be worse.
0
1
246
Aug ’25
iOS 26 Beta 7 double-tap to select text while in Dark Mode makes it very difficult to see what you're selecting. This has been an issue since Beta 1 and seems like intended behavior.
This has been an issue since installing the first beta and I haven't seen anyone else say anything about it so I feel like I'm going kind of bonkers. While using Dark Mode, double-tapping to select a word while using the Liquid Glass keyboard, like in Messages or Safari, produces a flashlight-like effect over the text with each tap. While this is a fine animation and pretty helpful when moving the cursor, the brightness of the flashlight effect on white text in Dark Mode makes it impossible to see what you're actually tapping to select. The brightness seems to intensify 100x when rapidly tapping. This is not an issue in Light Mode when the text itself is black. To recreate this, just turn your phone to Dark Mode, go into Messages and type a few words into a thread. Try to double-tap to select a word in the text box. The brightness of the selected word should intensify to the point of being unable to see the word itself. Has anyone been bothered by this? Is there a way to fix or adjust it? I've tried reducing transparency and a bunch of other settings but nothing has worked.
Topic: Design SubTopic: General
0
1
762
Aug ’25
Color folder and tags
I’m delighted with the introduction of new color folders. Although, I can’t help but wonder why we still need both color folders and tags. Aren’t the color folders sufficient for our needs?
Topic: Design SubTopic: General
3
1
1.2k
Aug ’25
Spam 4.3 (a)
Hello everyone, I’ve reached out to Apple’s review team multiple times, but unfortunately, I haven’t received any clear or specific guidance on why my app was rejected. My app has been rejected several times with the reason “Spam” under guideline 4.3, and I still don't understand exactly which part of the app is problematic. Even after providing the necessary information about the data, I resubmitted the app, and after a few days, it quickly moved into "In Review" status, but then was rejected within seconds with the same “Spam” message. I have sent over 13 messages asking for specific feedback, and all I get are vague responses saying “It’s spam, refer to 4.3, fix your app, and resubmit.” However, when I review the guidelines, I don’t see any specific reasons for rejection that apply to my app. I’m particularly confused because my app is a VPN, and when I check the guidelines, I see that apps in categories like dating and others are saturated, but VPN apps are not. My app uses completely dedicated servers, and the IP addresses are not found in any other apps. Still, my app keeps getting rejected. If anyone has encountered a similar issue or has any insight into what might be causing this, I would greatly appreciate it if you could provide detailed guidance on what specifically needs to be changed to get the app approved. Thank you!
Topic: Design SubTopic: General
4
1
1.1k
1w
Align NSMenuItem title to right
In my application, I am creating a simple NSMenu with NSMenuItems. The title of the NSMenuItems are adapted to the system language. So, when the system language is an RTL language (right to left), I want my NSMenuItem to be aligned at the right. I can't see anyone talking about this, or any option that could make me achieve that easily. NSMenuItem* item1; NSMenuItem* item2; item1 = [[NSMenuItem alloc] init]; item2 = [[NSMenuItem alloc] init]; item1.title = "foo"; item2.title = "bar"; item1.action = @selector(fooAction); item2.action = @selector(barAction); NSMenu *menu = [[NSMenu alloc] init]; [menu addItem:item1]; [menu addItem:item2];
Topic: Design SubTopic: General Tags:
0
1
126
Mar ’25
Liquid Glass App Icons without Icon Composer
We have found that on iOS 26 beta some of our app icons built from an Xcode 16 asset catalog containing a single 1024x1024 .png file have a Liquid Glass effect applied to them while others have not. The documentation states that If you choose not to use Icon Composer, you can still use an AppIcon asset catalog in your project containing individual app icon images and let the system apply the Liquid Glass material. and If you prefer, you can take advantage of the system’s automatically generated treatment that is applied to all app icons. Is there any insight into how the system treats app icons that have not yet been updated with Icon Composer?
1
1
2.3k
Nov ’25
iOS26 CarPlay not optimized for Subaru 11.6 inch vertical in infotainment screen
The newest iOS 26 CarPlay upgrade seems more like a downgrade with vehicles from Subaru with the 11.6 inch vertical infotainment display. Such a big screen, but only one widget shows at a time additionally, prior to this iOS update we had three lines of apps on the main page now only two. also to be noted album art size on all music streaming and podcast apps is extremely small about half the size of what it originally was prior to this update yes, I tried turning on and off the screen optimization setting and CarPlay. It did not do anything.
1
2
1.6k
Dec ’25
Liquid Glass icons appear differently in Dock
I just played around on macOS with the new icons created by Icon Composer, and I noticed that the Dock displays programmatically set icons differently. Try this: Make sure you have the Mail app in your Dock. Set the icon appearance to "Tinted/Light" and set a dark (black) background for the Desktop. Run this code: let image = NSWorkspace.shared.icon(forFile: "/System/Applications/Mail.app") if image.isValid { NSApp.applicationIconImage = image } You'll get something like this: When the icon appearance is set to "Default" or "Dark," everything works as expected, and the "Clear/Dark" and "Tinted/Dark" modes seem to work as well. It seems like the Dock uses a special blend mode depending on the selected background, but this does not seem to be the case if the icon is set programmatically. I filed feedback FB20291186.
0
2
735
Sep ’25