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.

All subtopics
Posts under Design topic

Post

Replies

Boosts

Views

Activity

A Summary of the WWDC25 Group Lab - Design
At WWDC25 we launched a new type of Lab event for the developer community - Group Labs. A Group Lab is a panel Q&A designed for a large audience of developers. Group Labs are a unique opportunity for the community to submit questions directly to a panel of Apple engineers and designers. Here are the highlights from the WWDC25 Group Lab for Design. Can you expand on how Liquid Glass helps with navigation and focus in the UI? Liquid Glass clarifies the navigation layer by introducing a single, floating pane that acts as the primary navigation area. Buttons within this pane seamlessly morph as you move between sections, and controls can temporarily lift into the glass surface. While avoiding excessive use of glass (like layering glass on glass), this approach simplifies navigation and strengthens the connection between menus, alerts, and the elements that trigger them. What should I do with customized bars that I might have in my app? Reconsider the content and behavior of customized bars. Evaluate whether you need all the buttons and whether a menu might be a better solution. Instead of relying on background colors or styling, express hierarchy through layout and grouping. This is a good opportunity to adopt the new design language and simplify your interface. What are scroll edge effects, and what options do we have for them? Scroll edge effects enhance legibility in controls by lifting interactive elements and separating them from the background. There are two types: a soft edge effect (a subtle blur) and a hard edge effect (a more defined boundary for high-legibility areas like column sorting). Scroll edge effects are designed to work seamlessly with Liquid Glass, allowing content to feel expansive while ensuring controls and titles remain legible. How can we ensure or improve accessibility using Liquid Glass? Legibility is a priority, and refinements are ongoing throughout the betas. Liquid Glass adapts well to accessibility settings like Reduce Transparency, Increase Contrast, and Reduce Motion. There are two variants of glass: regular glass, designed to be legible by default, and clear glass, used in places like AVKit, which requires more care to ensure legibility. Use color contrast tools to ensure contrast ratios are met. The Human Interface Guidelines (HIG) are a living document offering best practices. The colors and materials pages are key resources. Do you have any recommendations for convincing designers concerned with consistency across Android and Web to use Liquid Glass? Start small and focus on high-utility controls that don't significantly impact brand experience. Native controls offer familiarity and predictability to users. Using the native controls makes sure your app feels at home on the device. Using native frameworks provides built-in accessibility support (dynamic type, reduce transparency, increase contrast). Native controls come with built-in behaviors and interactions. Can ScrollViews include Liquid Glass within them? You can technically put a glass layer inside a scroll view, but it can feel heavy and doesn't align with the system's intention for Liquid Glass to serve as a fixed layer. Think of the content layer as the scrolling layer, and the navigational layer as the one using Liquid Glass. If there is glass on the content layer it will collide into the navigational layer. What core design philosophy guided the direction of iOS 26, beyond the goal of unification? The core design philosophy involved blurring the line between hardware and software, separating UI and navigation elements from content, making apps adaptable across window sizes, and combining playfulness with sophistication. It was about making the UI feel at home on rounded screens. Can we layer Liquid Glass elements on top of each other? Avoid layering Liquid Glass elements directly on top of each other, as it creates unnecessary visual complexity. The system will automatically convert nested glass elements to a vibrant fill style. Use vibrant fills and labels to show control shapes and ensure legibility. Opaque grays should be avoided in favor of vibrant colors, which will multiply with the backgrounds correctly. What will happen to apps that use custom components? Should they be adapted to the new design within the next year? The more native components you use, the more things happen for free. Standard components will be upgraded automatically. Look out for any customizations that might clash. Think about what is the minimum viable change, where your app still feels and looks very similar to what it did. Prioritize changes in core workflows and navigational areas. There are a number of benefits to using native components including user familiarity, built-in accessibility support, and built-in behaviors and interactions. Will Apple be releasing Figma design templates? Sketch kits were published on Monday and can be referenced. The goal is to ensure the resources are well-organized, well-named, and easy to use. It's a high priority.
Topic: Design SubTopic: General
0
0
1.3k
Jun ’25
Need Help with Guideline 4.2 - Minimum Functionality
I recently got feedback for my app under Guideline 4.2 - Design - Minimum Functionality, and I’m a bit confused. Apple mentioned that the app isn’t “app-like” enough and doesn’t provide sufficient entertainment value or utility. However, I genuinely think my app is unique compared to others on the market. Most similar apps only offer basic features like scorekeeping and saving the game. My app goes beyond that by tracking detailed statistics based on the types of scores achieved during the game. At the end, there’s even a Player Ratings section, which enhances competition and makes the experience more fun for players. Additionally, in today’s gaming scene, many groups play the traditional 101 game with a reward and penalty system. My app uniquely incorporates a reward system, something no other app in the market currently offers. I believe my app has the potential to stand out and meet the needs of a wide audience. Has anyone faced similar feedback? Or does anyone have suggestions on how I could better address this issue? Thanks in advance! 😊
0
0
534
Dec ’24
Picker list based on a selection from another Picker list
I have come quite far with my first app and have various picker lists working well. However, I am stuck thinking through how to do this next picker. My data model has Golf Course name and Tee. For each golf course there are multiple Tees and not all the same across the Courses. Example of Data CourseA RedTee CourseA GreenTee CourseA BlueTee CouseB RedTee CourseB YellowTee CourseB WhiteTee I first give the client the ability to Pick a Course from a picker list. That works fine. Now I want to create a Picker list of Tees but only for that selected Course. So if the client selected CourseB they would be presented with these Tees to select from RedTee YellowTee WhiteTee How do I limit the second picker to only show the Tees for the selected Course? Then in an associated question, once i have the Course and the Tee, I want to Auto fill the rest of a form with Slope, Rating and Yardage. @Model class ScorecardData { var scorecardcourseName: String var scorecardTee: String var scorecardSlope: Double var scorecardRating: Double var scorecardYardage: Int Here is my code for the Course Picker List Picker("", selection: $selectedCourse) { Text("Select a Course").tag(" ") ForEach(courses, id: \.self) { course in Text(course.courseName) .tag(course.courseName) } } .onChange(of: selectedCourse) { if(selectedCourse != nil) { roundsdata.roundscourseName = selectedCourse! } } Here is my current Picker list but its pulling all Tees for all Courses Picker("", selection: $selectedTee) { Text("Select Tee").tag(" ") ForEach (tees, id: \.self) { tee in Text(tee.scorecardTee) .tag(tee.scorecardTee) } } .onChange(of: selectedTee) { if(selectedTee != nil) { roundsdata.roundsTee = selectedTee! } } My @State and @Query statements are as follows in case there is a change there that is needed as well, @State private var selectedTee: String? = "Select Tee" @Query(sort: \ScorecardData.scorecardcourseName) private var tees: [ScorecardData] @State private var selectedCourse: String? = "Select Course" @Query(sort: \CourseData.courseName) private var courses: [CourseData]
Topic: Design SubTopic: General
3
0
479
Dec ’24
Give me my old Photos app back
Pleeease for the love of any and all things holy, I would really be eternally grateful if Apple decided to release an update that allows users to return to the old the photos app. Phones and technology are already overstimulating, and by making the photos app one continuous page it is emulating a social media app. The continuous page makes it much more overwhelming and confusing to find photos. Change and innovation is great! There are some changes that I enjoy from the ios 18 update, such as the little text enhancers that can emphasize certain words. However, the photos app was fine the way it was. If anything, Apple should allow the PAYING customers to choose how they would like their photos app (keeping the customizable option). also my battery which is normally super great is suddenly not as efficient…reminiscent of past devices I’ve had from Apple.
Topic: Design SubTopic: General
0
1
541
Dec ’24
Navigation Bar appears without having an Navigation View
For a school Project im making a iOS app that displays vending machines on a Map. My problem is that there is this huge navigation bar on top of the screen without even having a navigation view anywhere in the code. In the preview the bar is not shown, but when I upload the app to my phone or run it in the simulator the bar is there.
Topic: Design SubTopic: General
1
0
475
Dec ’24
SwiftData and #DEBUG with the canvas...
Hi all, Very new to this. Just getting into swift data, and am frustrated with the canvas not working with modelContainers in SwiftData. My understanding is that they work if inMemory = true, but not in the default case where data is persistent after an app is quit. Can anyone tell me if it is possible to conditionally create the modelContainer type based on a flag... If Bool:Canvas then inMemory = True, Else False... Then using this flag for all data models so my list views populate on the canvas, without having to run the simulator each time... I would assume you could also pre-populate the inMemory option if it is empty also... Or is there a simple and obvious solution that I am oblivious to. If it is possible, is it worth the time, hassle, and any possible issues?
0
0
533
Dec ’24
drop-down box Bug
There is a display issue when browsing wireless networks in the dropdown menu. In iOS version 18.1.1, the Wi-Fi switch is in the closed state; Step 1: Open the notification dropdown, and the first image bug appears; It will take some time for it to display [normally.]
1
0
515
Dec ’24
18.2 Beta 22C151 email
Just updated to newest beta of 18.2. The update corrects several major email issues but now I am only able to pull sone of my emails when I open mail. after opening my mail on the 18.2 iPhone 15 pro max I am ablevto pull only 1 message from Xfinity. When I check on my pc using outlook 2016 I am able to pull 18 additional messages. Going back to my iPhone after a half hour the additional mail messages still do not show up even after doing a hard reset of the phone. apologies, but these mail issues need to be resolved. It is bothersome that ios 18 was even released to the public at all with these type of issues.
Topic: Design SubTopic: General Tags:
1
0
750
Dec ’24
Apple Air Pods Upgrade!
Good evening. I have come up with this amazing and revolutionary idea that is going to change the ent world for the better. I’m a 23 year old Design Engineer from Greece and I would like to come to direct contact with the Apple Design Team, in order to discuss this project and the best case scenario, sell it to you. The foldable iPhone is not a good idea. Its not revolutionary and it’s going to leave a big black mark in Apple history. With my idea, the whole world will see again the greatness of the biggest company in history.
2
0
518
Dec ’24
Customizing screen..
I like that you can choose to tint all your apps, it looks great, but when I’m tinted the myfitnesspal widgets are blank. Just a white square. Kinda frustrating that I have to choose between looks or function..
Topic: Design SubTopic: General
0
0
385
Dec ’24
Question:evaluatedPolicyDomainState
Hello, Apple developer, I found in the documentation that the evaluatedPolicyDomainState API has been deprecated in iOS 18. In my project, many users rely on this value for comparison. I would like to ask, what does it mean that this API is deprecated? Will the value returned by this API be empty in the future? How should I adapt for existing users?" Let me know if you'd like any adjustments! Thank you. Good luck. [[context evaluatedPolicyDomainState] bytes]
0
0
538
Dec ’24
Record 4:3 ratio from photos on iPhone 16 pro max
I just recently upgraded to iPhone 16 pro max and I noticed you can no longer film in the 4:3 ratio in selfie mode or front camera, from photos like you could on the 13 and 15 (previous phones) I have 4:3 selected, I hold down shutter button and swipe as always, the photo readjusts to 16:9. Then when you hit the shutter button again to stop it resets back to 4:3. Did Apple change this? Is recording in that 4:3 ratio no longer an option?
Topic: Design SubTopic: General
2
4
1.1k
Dec ’24
Video Playback on iOS 18 public release is seriously flawed
Video Playback on iOS 18 public release is asinine. I use video playback to show slow-motion video frame by frame to my students and the video can only be shown at like 3/5 of the screen size (just like Apple fouled up screenshot editing about a year ago) If you try to view video in the full screen you can’t scrub through and see time stamps or play frame by frame sliding left to right. It’s absolutely ridiculous. 2 out of 3x the video timeline finishes fully right and I haven’t watched the full clip. Here’s a video showing the issue how at the small default size I can see the entire timeline and play the full video from beginning to end, but when I go to full screen and/or zoom in or move the screen around the timeline doesn’t work and you can’t scroll through the full video! Need the video to not condense in size on the screen and play the full height / width of the screen. Also not have the text of the location showing above the screen. Way too much clutter. The reduced size of the video for editing issue started with photos several updates ago and now Apple idiotically brought a terrible flaw from photos to videos as well. Ugh.
Topic: Design SubTopic: General
12
16
5.5k
Dec ’24
Multi layer delegate table missing
I recently detected a special crash on 18.0, 18.1, 18.1.1, 18.2,18.3 which cannot be repeated, and the page logs are related to the keyboard, is there any idea to deal with this problem? Exception Type: EXC_CRASH (SIGABRT) Exception Codes: 0x00000000 at 0x0000000000000000 Crashed Thread: 0 CrashDoctor Diagnosis: Application threw exception NSInternalInconsistencyException: Multi layer delegate table missing. Thread 0 Crashed: 0 CoreFoundation 0x000000018fa487cc __exceptionPreprocess + [ : 164] 1 libobjc.A.dylib 0x000000018cd1b2e4 objc_exception_throw + [ : 88] 2 Foundation 0x000000018ee188d8 _userInfoForFileAndLine 3 UIKitCore 0x0000000192ee8074 -[UIView _multiLayerDelegatesTableCreateIfNecessary:] + [ : 208] 4 UIKitCore 0x0000000192ee80c4 -[UIView _registerMultiLayerDelegate:] + [ : 36] 5 UIKitCore 0x00000001924f74c0 -[_UIPortalView setSourceView:] + [ : 132] 6 UIKitCore 0x000000019325b6bc -[_UIPortalView initWithSourceView:] + [ : 68] 7 UIKitCore 0x0000000193283ea4 -[_UITextMagnifiedLoupeView initWithSourceView:] + [ : 444] 8 UIKitCore 0x000000019373461c +[UITextLoupeSession _makeLoupeViewForSourceView:selectionWidget:orientation:] + [ : 84] 9 UIKitCore 0x00000001937347bc +[UITextLoupeSession _beginLoupeSessionAtPoint:fromSelectionWidgetView:inView:orientation:] + [ : 304] 10 UIKitCore 0x0000000192dc0ce0 -[UITextRefinementTouchBehavior textLoupeInteraction:gestureChangedWithState:location:translation:velocity:modifierFlags:shouldCancel:] + [ : 1756] 11 UIKit 0x0000000249cc89e0 -[UITextRefinementTouchBehaviorAccessibility textLoupeInteraction:gestureChangedWithState:location:translation:velocity:modifierFlags:shouldCancel:] + [ : 216] 12 UIKitCore 0x00000001935445b4 -[UITextRefinementInteraction loupeGestureWithState:location:translation:velocity:modifierFlags:shouldCancel:] + [ : 124] 13 UIKitCore 0x0000000193543f74 -[UITextRefinementInteraction loupeGesture:] + [ : 548] 14 UIKitCore 0x000000019259eac4 -[UIGestureRecognizerTarget _sendActionWithGestureRecognizer:] + [ : 128] 15 UIKitCore 0x000000019259e934 _UIGestureRecognizerSendTargetActions + [ : 92] 16 UIKitCore 0x000000019259e6f4 _UIGestureRecognizerSendActions + [ : 284] 17 UIKitCore 0x0000000192251b28 -[UIGestureRecognizer _updateGestureForActiveEvents] + [ : 572] 18 UIKitCore 0x0000000192223724 _UIGestureEnvironmentUpdate + [ : 2488] 19 CoreFoundation 0x000000018f9ea1f4 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + [ : 36] 20 CoreFoundation 0x000000018f9e9f98 __CFRunLoopDoObservers + [ : 552] 21 CoreFoundation 0x000000018fa19028 __CFRunLoopRun + [ : 948] 22 CoreFoundation 0x000000018fa18830 CFRunLoopRunSpecific + [ : 588] 23 GraphicsServices 0x00000001db9f81c4 GSEventRunModal + [ : 164] 24 UIKitCore 0x000000019257eeb0 -[UIApplication _run] + [ : 816] 25 UIKitCore 0x000000019262d5b4 UIApplicationMain + [ : 340] 26 顺丰小哥 0x00000001042c7cc0 main + [main.m : 13] 27 (null) 0x00000001b5406ec8 0x0 + 7335866056
Topic: Design SubTopic: General
0
0
383
Dec ’24
Guideline 4.3(a) - Design - Spam - automatic rejection
I previously written here, and some advices were to appeal to rejection sending them message describing uniqueness of the app. Nothing is working. In short, i have a vpn app (of course by design shares some concept with other apps that are in the app store). But since the rejection i have completely changed the ui, added built in browser, p2p messenger so users could interact with each other without any interference. The app is completely free with no ads. I thought this is it, there's no way it would reject this time, but... i get a notification with rejection repeating the same old message. I'm extremely frustrated and don't know what to do. Tried changing the logo of the app, the name to "Incognito - Messenger, VPN", app store screenshots. I've already appealed with screenshots describing unique features that other vpn apps don't have, but the message just repeats from app review team. Submission ID: 1a49ee0b-c4e2-4a36-8372-e4d3b9a8b13f Does anybody have an advice what i can do?
3
0
2.0k
Jan ’25
Converting iPad app to an iPhone app
I have an iPad developed using UIKit and storyboards now I have to develop UI for iPhone. Designs for iPhone app are completely new from iPad app also navigation is different. I have question regarding should I make different view controllers for iPhone and iPad and different storyboard
Topic: Design SubTopic: General Tags:
2
0
484
Jan ’25