iOS UI Element Usage Guidelines
In iOS, the UIKit framework provides a wide range of UI elements that you can use in your app. As you design the user interface of your app, always remember that users expect the standard views and controls to behave as they do in the built-in apps. This is to your advantage, as long as you use these elements appropriately in your app.
Another advantage of using standard UI elements is that they automatically receive updates if iOS introduces a redesigned appearance (completely custom elements do not receive updates). If you create custom UI elements to replicate standard UI elements in all but appearance, you should instead consider using the appearance customization programming interfaces available in iOS 5 and later. When you use these APIs, you can customize the appearance of most UI elements and still receive automatic appearance updates.
The status bar, navigation bar, tab bar, and toolbar are UI elements that have specifically defined appearances and behaviors in iOS apps. These bars are not required to be present in every app (apps that provide an immersive experience often don’t display any of them), but if they are present, it’s important to use them correctly. The bars provide familiar anchors to users of iOS devices, who are accustomed to the information they display and the types of functions they perform.
The Status Bar
The status bar displays important information about the device and the current environment.
UIStatusBarStyle constant, described in UIApplication Class Reference, controls the status bar style. To specify the status bar style, you set a value in your
Info.plist file. (For more information about the contents of this file, see “UIKit Keys”; to learn how to set values, see Property List Editor Help.)
Appearance and Behavior
The status bar always appears at the upper edge of the device screen (in all orientations) and contains information people need, such as the network connection, the time of day, and the battery charge.
On iPhone, the status bar can have different colors; on iPad, the status bar is always black.
Although you don’t use the status bar in the same way that you use other UI elements, it’s important to understand its function in your app.
Think twice before hiding the status bar if your app is not a game or full-screen media-viewing app. Although these apps might permanently hide the status bar, you should understand the ramifications of this design decision. Permanently hiding the status bar means that users must quit your app to find out, for example, whether they need to recharge their device.
Note that most iPad apps do not need to hide the status bar to gain extra space, because the status bar occupies such a small fraction of the screen. On iPad, the subtle appearance of the status bar does not compete with your app for the user’s attention. The small size of the status bar, combined with the slightly rounded corners of the app’s upper bar, make the status bar seem like part of the device background.
Consider hiding the status bar (and all other app UI) while people are actively viewing full-screen media. If you do this, be sure to allow people to retrieve the status bar (and appropriate app UI) with a single tap. Unless you have a very compelling reason to do so, it’s best to avoid defining a custom gesture to redisplay the status bar because users are unlikely to discover such a gesture or remember it.
Don’t create a custom status bar. Users depend on the consistency of the system-provided status bar. Although you might hide the status bar in your app, it’s not appropriate to create custom UI that takes its place.
When appropriate, display the network activity indicator. The network activity indicator can appear in the status bar to show users that lengthy network access is occurring. To learn how to implement this indicator in your code, see “Network Activity Indicator.”
On iPhone, specify the color of the status bar. You can choose gray (the default color), opaque black, or translucent black (that is, black with an alpha value of 0.5).
Be sure to choose a status bar appearance that coordinates with the rest of your iPhone app. For example, avoid using a translucent status bar if the navigation bar is opaque.
On iPhone, set whether the change in status bar color should be animated. Note that the animation causes the old status bar to slide up until it disappears off the screen while the new status bar slides into place.
A navigation bar enables navigation through an information hierarchy and, optionally, management of screen contents.
A navigation bar is contained in a navigation controller, which is an object that manages the display of your hierarchy of custom views. To learn more about defining a navigation bar in your code, see “Navigation Controllers” and UINavigationBar Class Reference.
Appearance and Behavior
A navigation bar appears at the upper edge of an app screen, just below the status bar. A navigation bar usually displays the title of the current screen or view, centered along its length. When navigating through a hierarchy of information, users tap the back button to the left of the title to return to the previous screen. Otherwise, users can tap content-specific controls in the navigation bar to manage the contents of the screen.
All controls in a navigation bar include a bezel around them, which iOS defines as the bordered style. If you place a plain (borderless) control in a navigation bar, it automatically converts to the bordered style.
A navigation bar can be translucent or opaque. If the bar is translucent, the top edge of the main content view meets the bottom edge of the status bar, so that users can see the content behind the navigation bar. If the bar is opaque, the top edge of the main content view meets the bottom edge of the navigation bar.
On iPhone, changing the device orientation from portrait to landscape can change the height of the navigation bar automatically. On iPad, the height and translucency of a navigation bar doesn’t change with rotation.
On iPhone, a navigation bar always displays across the full width of the screen. On iPad, a navigation bar can display within a view—such as one pane of a split view—that doesn’t extend across the screen.
You can use a navigation bar to enable navigation among different views, or provide controls that manage the items in a view.
Use the title of the current view as the title of the navigation bar. When the user navigates to a new level, two things should happen:
The bar title should change to the new level’s title.
A back button should appear to the left of the title, and it should be labeled with the previous level’s title.
Make sure it’s easy to read the text in the navigation bar. The system font provides maximum readability, but you can specify a different font, if appropriate.
Consider putting a segmented control in a navigation bar at the top level of an app. This is especially useful if doing so helps to flatten your information hierarchy and make it easier for people to find what they’re looking for. If you use a segmented control in a navigation bar, be sure to choose accurate back-button titles. (For usage guidelines, see “Segmented Control.”)
Avoid crowding a navigation bar with additional controls, even if there appears to be enough space. The navigation bar should contain no more than a view’s current title, the back button, and one control that manages the view’s contents. If, instead, you use a segmented control in the navigation bar, the bar should not display a title and it should not contain any controls other than the segmented control.
Use system-provided buttons according to their documented meaning. For more information, see “Standard Buttons for Use in Toolbars and Navigation Bars.” If you decide to create your own navigation bar controls, see “Icons for Navigation Bars, Toolbars, and Tab Bars” for advice on how to design them.
If appropriate, customize the appearance of a navigation bar to coordinate with the look of your app. For example, you can supply a custom background image or tint for the bar and you can specify translucency. In some cases, it can be a good idea to supply a resizable background image; to learn more about creating a resizable image, see “Tips for Creating Resizable Images.”
Make sure that the look of your customized navigation bar is consistent with your app’s appearance and style. If you use a translucent navigation bar, for example, don’t combine it with an opaque toolbar. Also, it’s best to avoid changing the image, color, or translucency of the navigation bar in different screens in the same orientation.
If appropriate, customize the appearance of navigation-bar controls. In particular, if you supply a custom background appearance for the navigation bar, you should consider supplying a coordinating appearance for the bar controls.
Make sure that a customized back button still looks like a back button. Users know that the standard back button allows them to retrace their steps through a hierarchy of information. If, for example, you create a custom back button that doesn’t have a pointed side, users won’t instantly know what it does.
Don’t create a multisegment back button.
Creating a multisegment back button (as shown in the example above) causes several problems:
The extended width of a multisegment back button doesn’t leave room for the title of the current screen.
It’s very difficult to indicate the selected state of an individual segment.
The more segments there are, the smaller the hit region for each one, which makes it difficult for users to tap a specific one.
Choosing which levels to display as users navigate deeper in the hierarchy is problematic.
If you think users might get lost without a multisegment back button that displays a type of breadcrumb path, it probably means that users must go too deeply into the information hierarchy to find what they need. To address this, you should flatten your information hierarchy.
On iPhone, be prepared for the change in navigation bar height that occurs on device rotation. In particular, make sure that your custom navigation bar icons fit well in the thinner bar that appears in landscape orientation. Don’t specify the height of a navigation bar programmatically; instead, you can take advantage of the
UIBarMetrics constants to ensure that your content fits well.
A toolbar contains controls that perform actions related to objects in the screen or view.
A toolbar is typically contained in a navigation controller, which is an object that manages the display of a hierarchy of custom views. To learn more about defining a toolbar in your code, see “Displaying a Navigation Toolbar” in View Controller Catalog for iOS and UIToolbar Class Reference.
Appearance and Behavior
On iPhone, a toolbar always appears at the bottom edge of a screen or view, but on iPad it can instead appear at the top edge.
Toolbar items are displayed equally spaced across the width of the toolbar. The precise set of toolbar items can change from view to view, because the items are always specific to the context of the current view.
On iPhone, changing the device orientation from portrait to landscape can change the height of the toolbar automatically. On iPad, the height and translucency of a toolbar don’t change with rotation.
Use a toolbar to provide a set of actions users can take in the current context.
Use a toolbar to give people a selection of frequently used commands that make sense in the current context. An alternative is to put a segmented control in a toolbar to give people access to different perspectives on your app’s data or to different app modes (for usage guidelines, see “Segmented Control”).
If appropriate, customize the appearance of a toolbar to coordinate with the overall look of your app. For example, you can specify a custom background image or tint and you can specify translucency. In some cases, it can be a good idea to supply a resizable background image; to learn more about creating a resizable image, see “Tips for Creating Resizable Images.”
Make sure that your toolbar customization is consistent with the look of the rest of your app. If you use a translucent toolbar, for example, don’t combine it with an opaque navigation bar. Also, it’s usually best to avoid changing the appearance of the toolbar in different screens in the same orientation.
Maintain a hit target area of at least 44 x 44 points for each toolbar item. If you crowd toolbar items too closely together, people have difficulty tapping the one they want.
Use system-provided toolbar items according to their documented meaning. See “Standard Buttons for Use in Toolbars and Navigation Bars” for more information. If you decide to create your own toolbar items, see “Icons for Navigation Bars, Toolbars, and Tab Bars” for advice on how to design them.
If appropriate, customize the appearance of toolbar items. If you customize the appearance of the toolbar, you might want to consider creating a coordinating appearance for the toolbar items. You might also want to adjust the selected appearance of the items so that they look good on your customized toolbar background.
Try to avoid mixing plain style (borderless) and bordered toolbar items in the same toolbar. You can use either style in a toolbar, but mixing them doesn’t usually look good.
On iPhone, be prepared for the change in toolbar height that occurs on device rotation. In particular, make sure your custom toolbar icons fit well in the thinner bar that appears in landscape orientation. Don’t specify the height of a toolbar programmatically; instead, you can take advantage of the
UIBarMetrics constants to ensure that your content fits well.
A tab bar gives people the ability to switch between different subtasks, views, or modes.
A tab bar is contained in a tab bar controller, which is an object that manages the display of your set of custom views. To learn more about defining a tab bar in your code, see “Tab Bar Controllers” and UITabBar Class Reference.
Appearance and Behavior
A tab bar appears at the bottom edge of the screen and should be accessible from every location in the app. A tab bar displays icons and text in tabs, all of which are equal in width and display a black background by default. When users select a tab, the tab displays a lighter background (which is known as the selection indicator image) and its icon receives a blue glow.
On iPhone, a tab bar can display no more than five tabs at one time; if the app has more tabs, the tab bar displays four of them and adds the More tab, which reveals the additional tabs in a list. On iPad, a tab bar can display more than five tabs.
A tab can display a badge (a red oval that contains white text, either a number or exclamation point) that communicates app-specific information.
A tab bar does not change its opacity or height, regardless of device orientation.
Use a tab bar to give users access to different perspectives on the same set of data or different subtasks related to the overall function of your app. When you use a tab bar, follow these guidelines:
Don’t use a tab bar to give users controls that act on elements in the current mode or screen. If you need to provide controls for your users, use a toolbar instead (for usage guidelines, see “Toolbar”).
In general, use a tab bar to organize information at the app level. A tab bar is well-suited for use in the main app view because it’s a good way to flatten your information hierarchy and provide access to several peer information categories or modes at one time.
Don’t remove a tab when its function is unavailable. If a tab represents a part of your app that is unavailable in the current context, it’s better to display a disabled tab than to remove the tab altogether. If you remove a tab in some cases but not in others, you make your app’s UI unstable and unpredictable. The best solution is to ensure that your tabs are always enabled, but to explain why a tab’s content is unavailable. For example, if the user does not have any songs on an iOS device, the Music app does not disable the Songs tab; instead, the Songs tab displays a screen that explains how to download songs.
On iPad, you might use a tab bar in a split view pane or a popover if the tabs switch or filter the content within that view. However, it often works better to use a segmented control at the bottom edge of a popover or split view pane, because the appearance of a segmented control coordinates better with the popover or split view appearance. (For more information on using a segmented control, see “Segmented Control.”)
Consider badging a tab bar icon to communicate unobtrusively. You can display a badge on a tab bar icon to indicate that there is new information associated with that view or mode.
Use system-provided tab bar icons according to their documented meaning. For more information, see “Standard Icons for Use in Tab Bars.” If you decide to create your own tab bar icons, see “Icons for Navigation Bars, Toolbars, and Tab Bars” for advice on how to design them.
If appropriate, customize the appearance of a tab bar. For example, you can supply a custom tint for the tab bar and its icons, as long as the icons are either system-provided or custom template images (to learn how to create a template image, see “Icons for Navigation Bars, Toolbars, and Tab Bars”). You can also supply a background image for the tab bar (note that it’s often a good idea to supply a resizable background image; to learn more about creating a resizable image, see “Tips for Creating Resizable Images”). Finally, you can customize the glow that iOS adds to the icon in a selected tab (note that the glow is separate from the selection indicator image). When you supply a tint for the appearance of a selected tab icon, iOS applies the glow on top of the tint; if you don't supply a tint, iOS applies the standard blue glow.
If necessary, provide a custom selection indicator image. In particular, if you provide a custom tint for a tab bar, you might want to define a selection indicator image that coordinates with it. You can supply one fixed-size or resizable image to apply to the currently selected tab (you can’t supply multiple selection indicator images for different tabs). In addition, your image should be translucent because iOS draws the selection indicator image behind the tab icon.
On iPad, avoid crowding the tab bar with too many tabs. Putting too many tabs in a tab bar can make it physically difficult for people to tap the one they want. Also, with each additional tab you display, you increase the complexity of your app. In general, try to limit the number of tabs in the main view or in the right pane of a split view to about seven. In a popover or in the left pane of a split view, up to about five tabs fit well.
On iPad, avoid creating a More tab. In an iPad app, a screen devoted solely to a list of additional tabs is a poor use of space.
On iPad, display the same tabs in each orientation to increase the visual stability of your app. In portrait, the recommended seven tabs fit well across the width of the screen. In landscape orientation, you should center the same tabs along the width of the screen. This guidance also applies to the usage of a tab bar within a split view pane or a popover. For example, if you use a tab bar in a popover in portrait, it works well to display the same tabs in the left pane of a split view in landscape.
iOS provides several views and view controllers that can display custom app content. Each view has certain properties and behaviors that make it especially well-suited to display certain types of information.
An activity represents a system-provided or custom service—accessible via an activity view controller—that can act on some specified content.
To learn more about defining an activity in your code, see UIActivity Class Reference.
Appearance and Behavior
An activity is a customizable object that represents a service that your app can perform. When users tap the Share button, a set of activities is presented by an activity view controller (to learn how incorporate an activity view controller into your app, see “Activity View Controller”).
Each activity is represented by an icon and a title that appears below the icon. System-provided activities can use either of two icon styles: a style that looks like an app icon or a style that evokes the Settings icon. A third-party activity is always represented by an icon that uses the second style. You can see both icon styles in the activity view controller shown below.
Users initiate a service by tapping its activity icon in the activity view controller. In response, the activity either performs the service immediately or—if the service is complicated—it can request more information before performing the service.
Use an activity to give users access to a custom service that your app can perform. Note that iOS provides several built-in services, such as Print, Twitter, Message, and Copy. You do not need to create a custom activity that performs a built-in service.
The following guidelines can help you design an activity icon and title that accurately describes your service and looks good onscreen.
Create a streamlined image that represents your service. A service’s image is displayed in an icon in an activity view controller. Design a simple template image that clearly identifies your service to users. (A template image is an image that iOS uses as a mask to create the final image that users see.) To create a template image that looks good in the final icon, follow these guidelines:
Use black or white with appropriate alpha transparency.
Do not include a drop shadow.
Create the image in the following sizes:
For iPhone and iPod touch:
About 43 x 43 pixels
About 86 x 86 pixels (high resolution)
About 55 x 55 pixels
About 110 x 110 pixels (high resolution)
Center the image within the square area.
Create an activity title that succinctly describes your service. The title is displayed below the activity’s icon in the activity view controller. A short title is best, because it looks better onscreen and it’s easier to localize. If your title is too long, iOS first shrinks the text and then—if the title is still too long—truncates it. In general, it’s a good idea to avoid including your company or product name in the activity title.
Activity View Controller
An activity view controller presents a transient view that lists system-provided and custom services that can act on some specified content.
To learn more about defining an activity view controller in your code, see UIActivityViewController Class Reference.
Appearance and Behavior
An activity view controller displays a configurable list of services that the user can perform on the specified content. Users tap the Share button to reveal the contents of an activity view controller.
An activity view controller works with a set of activities, each of which represents a specific service. To learn how to design an activity to provide a custom service, see “Activity.”
On iPhone and iPod touch, an activity view controller appears in an action sheet; on iPad, it appears in a popover.
Use an activity view controller to give people a list of services they can perform on content that is specified in some way. The services can be system-provided—such as Copy, Twitter, and Print—or custom. A common way to use an activity view controller is to allow users to post content they’ve selected to a social media account.
Don’t create a custom button that reveals an activity view controller. People are accustomed to accessing system-provided services when they tap the Share button. You want to take advantage of this learned behavior and avoid confusing users by providing an alternate way to do the same thing.
Ensure that the listed services are appropriate in the current context. You can change the services listed in an activity view controller by specifying system-provided services to exclude and by identifying custom services to include. For example, if you wanted to prevent users from printing an image, you would exclude the Print activity from the activity view controller.
A collection view manages an ordered collection of items and presents them in a customizable layout.
To learn more about defining a collection view in your code, see Collection View Programming Guide for iOS.
Appearance and Behavior
A collection view is a customizable scrolling view that displays a set of items your app provides. People use gestures to interact with the items in a collection view and they can modify the collection by inserting, moving, and deleting items.
A collection view works with several other objects in your code to define the overall layout and appearance of items. Chief among these objects is the layout object—that is, a standard or custom subclass of
UICollectionViewLayout—which specifies the placement and visual attributes of the individual items in the collection. For convenience, UIKit provides the
UICollectionViewFlowLayout object, which defines an adjustable linear ordering that can display a grid of items.
Within a collection view, optional supplementary views can visually distinguish subsets of items. A collection view also supports optional decoration views that can provide custom background and other appearances.
When users insert, move, or delete items, a collection view animates the action by default. Collection views also support the addition of gesture recognizers to perform custom actions; by default, a collection view recognizes the tap and touch-and-hold gestures to handle item selection and editing, respectively.
Use a collection view to give users a way to view and manipulate a set of items that don’t need to be displayed in a list. Because a collection view doesn’t enforce a strictly linear layout, it’s particularly well suited to display items that differ in size.
A collection view supports extensive customization, so it’s essential to avoid getting distracted by the ability to create radical new designs. You want a collection view to enhance the user’s task; you don’t want a collection view to become the focus of the user experience. The following guidelines can help you create collection views that people appreciate.
Don’t use a collection view when a table view is a better choice. In some cases, it’s easier for people to view and understand information when it’s presented in a list. For example, it can be simpler and more efficient for people to view and interact with textual information when it’s in a scrolling list. Also, it’s a good idea to continue using a table view to present a hierarchy of information.
Make it easy for people to select an item. If it’s hard for users to tap an item in your collection view, they’re less likely to enjoy using your app. As with all UI objects that users might want to tap, ensure that the minimum target area for each item in a collection view is 44 x 44 points. If you’re using a collection view in an iPhone app, it’s especially important to make items easy to tap.
Use caution if you make dynamic layout changes. A collection view allows you to change the layout of items while users are viewing and interacting with them. If you decide to dynamically adjust a collection view’s layout, be sure that the change makes sense and is easy for users to track. Changing a collection view’s layout without an obvious motivation can give people the impression that your app is unpredictable and hard to use. And, if the current focus or context is lost during a dynamic layout change, users are likely to feel that they’re no longer in control of your app.
Container View Controller
A container view controller manages and presents its set of child views (or view controllers) in a custom way. Examples of system-defined container view controllers are tab bar view controller, navigation view controller, and split view controller (you can learn more about these components in “Tab Bar,” “Navigation Bar,” and “Split View (iPad Only)”).
To learn more about defining a custom container view controller in your code, see UIViewController Class Reference.
Appearance and Behavior
As you might expect, a custom container view controller doesn’t have any predefined appearance or behavior. When you subclass
UIViewController to create a custom container view controller object, you decide how many child view controllers it contains and how they should be presented.
You can use a container view controller to present content through which users navigate in a custom way.
Ask yourself whether a custom container view controller is really necessary. Users are comfortable with the appearance and behavior of standard container view controllers, such as split view and tab bar view. You need to be sure that the potential advantages of your custom container view outweigh the fact that users won’t recognize it or instantly know how it works.
Make sure that your custom container view controller works in both orientations. You need to design a container view controller that gives users a consistent experience in both portrait and landscape.
In general, avoid flashy view transitions. When you use storyboards to design a custom view controller, it’s easy to define custom animations for the transitions between content views. But in most cases, flamboyant view transitions distract people from their purpose and often decrease the aesthetic appeal of your app.
An image view displays one image or an animated series of images.
To learn more about defining an image view in your code, see UIImageView Class Reference.
Appearance and Behavior
An image view doesn’t have any predefined appearance and it doesn’t enable user interaction by default. An image view examines properties of both the image and its parent view to determine whether the image should be stretched, scaled, sized to fit, or pinned to a specific location.
Avoid using an image view as a button. Although you can make an image view behave like a button, it’s better to meet users’ expectations and use a button that displays a custom background image (to learn more about buttons, see “Rounded Rectangle Button”).
As much as possible, ensure that all images in an image view have the same size and use the same scale. If your images have different sizes, the image view will adjust them separately; if your images use different scale factors, they may render incorrectly.
A map view presents geographical data and supports most of the functionality provided by the built-in Maps app (shown below in Photos).
To learn more about defining a map view in your code, see Map Kit Framework Reference.
Appearance and Behavior
A map view displays a geographical area using standard map data, satellite imagery, or a combination of both. A map view can also display annotations—which mark single points—and overlays, which delineate paths or two-dimensional areas.
Users can zoom and pan a map view—unless you disallow these actions—and you can zoom and pan the map programmatically.
Use a map view to give users an interactive view of a geographical area. If you’re developing a routing app, use a map view to display the user’s route (for more information about creating a routing app, see “Routing”).
In general, let users interact with the map. Although you can prevent people from zooming or panning a map view in your app, it’s usually best to avoid doing so. People are accustomed to interacting with the built-in Maps app, and they expect to be able to interact with your map in similar ways.
Use the standard pin colors in a consistent way. A map pin shows the location of a point of interest in your map. People are familiar with the pin colors in the built-in Maps app, so it’s best to avoid redefining the meaning of these colors in your app. When you use the standard pin colors, be sure to use them in the following ways:
Red—a destination point
Green—a starting point
Purple—a user-specified point
Page View Controller
A page view controller manages multipage content using either a scrolling or page-curl transition style (the page-curl style is shown below).
To learn more about defining a page view controller in your code, see “Page View Controllers”.
Appearance and Behavior
A scroll-style page view controller has no default appearance. A page-curl-style page view controller adds the appearance of the inside of a book spine between pairs of pages and—while the user is turning a page—it displays a page-curl appearance.
A page view controller animates the transition from one page to another, according to the specified transition style. If the specified style is scroll, the current page scrolls to the next page; if the specified style is page-curl, the current page appears to turn like a page in a book.
Use a page view controller to present content that users access in a linear fashion—such as the text of a story—or content that naturally breaks into chunks—such as a calendar.
A page view controller lets users move from one page to the next or previous page; it doesn’t give users a way to jump among nonadjoining pages. If you want to use a page view controller to present content that users might access in a nonlinear fashion—such as a dictionary or the table of contents in a book—you must implement a custom way to let users move to different areas of the content.
Popover (iPad Only)
A popover is a transient view that can be revealed when people tap a control or an onscreen area.
To learn more about defining a popover in your code, see “Popovers” in View Controller Programming Guide for iOS and UIPopoverController Class Reference.
Appearance and Behavior
A popover is a self-contained view that hovers above the contents of a screen. It always displays an arrow that indicates the point from which it emerged. A popover can contain a wide variety of objects and views, such as:
Table, image, map, text, web, or custom views
Navigation bars, toolbars, or tab bars
Controls or objects that act upon objects in the current app view
In iPad apps, an action sheet always appears inside a popover.
You can use a popover to:
Display additional information or a list of items related to the focused (or selected) object.
Display an action sheet that contains a short list of options that are closely related to something on the screen.
Display the contents of the left pane when a split view–based app is in portrait. If you do this, you either provide an appropriately titled button that displays the popover—preferably in a navigation bar or toolbar at the top of the screen—or allow people to make the swipe gesture to hide and reveal it.
Avoid providing a “dismiss popover” button. A popover should close automatically when its presence is no longer necessary. To determine when a popover’s presence is no longer necessary, consider the following scenarios:
When a popover’s only function is to provide a set of options or items that have an effect on the main view, it should close as soon as people make a choice. This behavior is very similar to that of a menu in a computer application. Note that this behavior also applies to a popover that contains only an action sheet: As soon as people tap a button in the action sheet, the popover should close.
Occasionally, it can make sense to provide a popover that contains items that affect the main view, but that does not close when people make a choice. You might want to do this if you implement an inspector in a popover, because people might want to make an additional choice or change the attributes of the current choice.
A popover that provides menu or inspector functionality should close when people tap anywhere outside its bounds, including the control that reveals the popover. In a popover that provides a menu of choices, this gesture means that the user has decided not to make a choice (so the main view remains unaffected). In a popover that contains an action sheet, this gesture takes the place of tapping a Cancel button.
If a popover enables a task, it can be appropriate to display buttons that complete or cancel the task and simultaneously dismiss the popover. In general, popovers that enable an editing task do not close when people tap outside of them; instead, they display a Done button and a Cancel button. These buttons help remind people that they’re in an editing environment and allow them to explicitly keep or discard their input. When people tap either button, the popover should close.
In general, you should prevent people from closing a task-enabling popover when they tap outside its borders, especially when it’s important that people finish—or explicitly abandon—the task. Otherwise, you should save people’s input when they tap outside a popover’s borders, just as you would if they tapped Done.
In general, save users’ work when they tap outside a popover’s borders. Not every popover requires an explicit dismissal, so people might dismiss them mistakenly. You should discard the work people do in a popover only if they tap a Cancel button.
Ensure that the popover arrow points as directly as possible to the element that revealed it. Doing this helps people remember where the popover came from and what task or object it’s associated with.
Make sure people can use a popover without seeing the app content behind it. A popover obscures the content behind it, and people cannot drag a popover to another location.
Ensure that only one popover is visible onscreen at a time. You should not display more than one popover (or custom view designed to look and behave like a popover) at the same time. In particular, you should avoid displaying a cascade or hierarchy of popovers simultaneously, in which one popover emerges from another.
Don’t display a modal view on top of a popover. Except for an alert, nothing should display on top of a popover.
When possible, allow people to close one popover and open a new one with one tap. This behavior is especially desirable when several different bar buttons each open a popover, because it prevents people from having to make extra taps.
Avoid making a popover too big. A popover should not appear to take over the entire screen. Instead, it should be just big enough to display its contents and still point to the place it came from.
Ideally, the width of a popover should be at least 320 points, but no greater than 600 points. The height of a popover is not constrained, so you can use it to display a long list of items. In general, though, you should try to avoid scrolling in a popover that enables a task or that presents an action sheet. Note that the system might adjust both the height and the width of a popover to ensure that it fits well on the screen.
Generally, use standard UI controls and views within a popover. In general, popovers look best, and are easier for users to understand, when they contain standard controls and views.
If appropriate, customize the appearance of a popover. Although it’s easy to customize many of the visual aspects of a popover by using the
UIPopoverBackgroundView APIs, it’s important to avoid creating a design that people might not recognize as a popover. If you change the appearance of a popover too much, users can’t rely on their prior experience to help them understand how to use it in your app. (If you decide to supply a resizable background image, see “Tips for Creating Resizable Images” for more information on how to do this.)
Take care if you combine a customized background color or texture with standard controls and views. Be sure the standard UI elements look good and are easy to read when they’re seen on top of your custom background appearance.
If appropriate, change a popover’s size while it remains visible. You might want to change a popover’s size if you use it to display both a minimal and an expanded view of the same information. If you adjust the size of a popover while it’s visible, you can choose to animate the change. Animating the change is usually a good idea because it avoids making people think that a new popover has replaced the old one.
A scroll view helps people see content that is larger than the scroll view’s boundaries (the image shown below is both taller and wider than the scroll view that contains it).
To learn more about defining a scroll view in your code, see UIScrollView Class Reference.
Appearance and Behavior
When a scroll view first appears—or when users interact with it—vertical or horizontal scroll indicators flash briefly to show users that there is more content they can reveal. Other than the transient scroll indicators, a scroll view has no predefined appearance.
A scroll view responds to the speed and direction of gestures to reveal content in a way that feels natural to people. When users drag content in a scroll view, the content follows the touch; when users flick content, the scroll view reveals the content quickly and stops scrolling when the user touches the screen or when the end of the content is reached. A scroll view can also operate in paging mode, in which each drag or flick gesture reveals one app-defined page of content.
You can use a scroll view to give people access to large views—or to large numbers of views—in a constrained space. Because people are accustomed to using scroll views throughout iOS, make sure the scroll views in your app behave as people expect.
Support zoom behavior appropriately. If it makes sense in your app, you can let users pinch or double-tap to zoom into and out of a scroll view. When you enable zoom, you should also set maximum and minimum scale values that make sense in the context of the user’s task. For example, letting users zoom in on text until one character fills the screen is unlikely to make it easier for them to read the content.
Consider using a page control with a paging-mode scroll view. When you want to display content that’s been divided into pages, screenfuls, or other chunks, it’s a good idea to give users a way to tell how many chunks are available and which one they’re currently viewing. A page control displays dots that give people this information and—because page controls are used in Safari, Stocks, Weather, and other built-in apps—people already understand how to use them.
When you combine a page control with a paging-mode scroll view, it’s a good idea to disable the scroll indicator that’s on the same axis as the page control. People then have one unambiguous way to page through the content. For more information about using a page control in your app, see “Page Control.”
In general, display only one scroll view at a time. People often make large swipe gestures when they scroll, so it can be difficult for them to avoid interacting with a neighboring scroll view on the same screen. If you decide to put two scroll views on one screen, consider allowing them to scroll in different directions so that one gesture is less likely to scroll both views. For example, Stocks in portrait orientation on iPhone displays stock quotes in a vertically scrolling view above company-specific information in a horizontally scrolling view.
Split View (iPad Only)
A split view is a full-screen view that consists of two side-by-side panes.
A split view is contained in a split view controller, which is an object that manages the display of the split view’s panes. To learn more about defining a split view in your code, see UISplitViewController Class Reference.
Appearance and Behavior
A split view consists of two panes. The width of the left pane is fixed at 320 points in all orientations. Users cannot resize either pane of a split view.
Both panes can contain a wide variety of objects and views, such as:
Table, image, map, text, web, or custom views.
Navigation bars, toolbars, or tab bars.
You can use a split view to display persistent information in the left pane and related details or subordinate information in the right pane. In this design pattern, when people select an item in the left pane, the right pane should display the information related to that item. (You’re responsible for making this happen in code.)
Sometimes, when an app uses a split view in landscape, it displays the contents of the left pane in a popover when the device rotates to portrait. However, you are not required to follow this pattern. If it makes sense in your app, you can design your UI to display side-by-side views in all orientations.
Avoid creating a right pane that is narrower than the left pane. Although the width of the right pane is up to you, it does not look good to use a width of less than 320 points (which is the width of the left pane).
Avoid displaying a navigation bar in both panes at the same time. Doing this would make it very difficult for users to discern the relationship between the two panes.
In general, indicate the current selection in the left pane in a persistent way. This behavior helps people understand the relationship between the item in the left pane and the contents of the right pane. This is important because the content of the right pane can change, but it should always remain related to the item selected in the left pane.
Allow people to use the swipe gesture to access the left pane, if appropriate. By default, only the right pane is displayed in portrait orientation and you provide users with a button—typically located in a navigation bar—to reveal and hide the left pane. In iOS 5.1 and later, the split view controller also supports the swipe gesture to perform the reveal/hide action. Unless your app uses the swipe gesture to perform other functions, you should allow people to use it for accessing the left pane.
A table view presents data in a single-column list of multiple rows.
To learn more about defining a table view in your code, see Table View Programming Guide for iOS and UITableView Class Reference.
Appearance and Behavior
A table view displays data in rows that can be divided by section or separated into groups. Users flick or drag to scroll through rows or groups of rows. Users tap a table row to select it and use table view controls to add or remove rows, select multiple rows, see more information about a row item, or reveal another table view. A table row highlights briefly when the user taps a selectable item.
If a row selection results in navigation to a new screen, the selected row highlights briefly as the new screen slides into place. When the user navigates back to the previous screen, the originally selected row again highlights briefly to remind the user of their earlier selection (it doesn’t remain highlighted).
iOS defines two styles of table views, which are distinguished mainly by appearance.
Plain tables display rows that extend the full width of the screen. Rows can be separated into labeled sections and an optional index can appear vertically along the right edge of the view. A header can appear before the first item in a section and a footer can appear after the last item. By default, the row background is a creamy white.
Grouped tables display groups of rows that are inset from the side edges of the screen. A grouped table view always contains at least one group of list items—one list item per row—and each group always contains at least one item. A group can be preceded by a header and followed by a footer. By default, groups are displayed on a distinctive blue-striped background; inside a group, row background is a creamy white. A grouped table view doesn’t include an index.
iOS includes some table-view elements that can extend the functionality of table views. Unless noted otherwise, these elements are suitable for use with table views only.
Indicates that the row is selected
Displays another table associated with the row
Detail Disclosure button
Displays additional details about the row in a new view (for information on how to use this element outside of a table, see “Detail Disclosure Button”)
Indicates that the row can be dragged to another location in the table
Adds a new row to the table
Delete button control
In an editing context, reveals and hides the Delete button for a row
Deletes the row
In addition to the table-specific elements listed in Table 7-1, iOS defines the refresh control, which gives users the ability to refresh a table’s contents. To learn more about using a refresh control with a table in your app, see “Refresh Control.”
iOS defines four table-cell styles that implement the most common layouts for table rows in both plain and grouped tables. Each cell style is best suited to display a different type of information.
UITableViewCellStyleDefault). The default cell style includes an optional image in the left end of the row, followed by a left-aligned title in black.
In the default cell style, the text label’s appearance implies that it represents an item name or title and its left-alignment makes the list easy to scan. This makes the default style good for displaying a list of items that don’t need to be differentiated by supplementary information.
UITableViewCellStyleSubtitle). The subtitle style includes an optional image in the left end of the row, followed by a left-aligned title on one line and a left-aligned subtitle on the line below. The title is in black and the subtitle is in a smaller, gray font.
In the subtitle cell style, the prominent appearance of the text label implies that it represents an item name or title, whereas the subtle appearance of the detail text label implies that it contains subsidiary information related to the item. The left-alignment of the text labels makes the list easy to scan. This table-cell style works well when list items look similar, because users can use the additional information in the detail text labels to help distinguish items named in the text labels.
Value 1 (
UITableViewCellStyleValue1). The value 1 style displays a left-aligned title in black on the same line with a right-aligned subtitle in a smaller, blue font. Images don’t fit well in this style.
In the value 1 cell style, the appearance of the text label implies that it represents an item name or title, whereas the appearance of the detail text label implies that it provides important information that’s closely associated with the item.
The left-alignment and font of the text label help users scan the list for the item they want, and the right-alignment of the detail text label draws their attention to the related information it provides. This table-cell style works well to display an item’s current value, possibly selected from a sublist.
Value 2 (
UITableViewCellStyleValue2). The value 2 style displays a right-aligned title in a small, blue font, followed on the same line by a left-aligned subtitle in a larger, black font. Images don’t fit well in this style.
In the value 2 cell style, the right-alignment, constrained width, and font of the text label imply that it functions as a heading or caption for the important information in the more prominent, left-aligned detail text label.
In this layout, the labels are aligned towards each other at the same location in every row. This creates a crisp, vertical margin between the text labels and the detail text labels in the list, which helps users focus on the first words of the detail text label.
You can use a table view to display large or small amounts of information cleanly and efficiently. For example, you can use a table view to:
Provide a list of options from which users can select. You can use the checkmark to show users the currently selected option (or options) in the list.
To display a list of choices users see when they tap an item in a table row, you can use either a plain or a grouped table view. To display a list of choices users see when they tap a button or other UI element that is not in a table row, use the plain style.
Display hierarchical information. The plain table style is well-suited to display a hierarchy of information. Each list item can lead to a different subset of information displayed in another list. Users follow a path through the hierarchy by selecting one item in each successive list. The disclosure indicator tells users that tapping anywhere in the row reveals the subset of information in a new list.
Display conceptually grouped information. Both table view styles allow you to provide context by supplying header and footer views between sections of information. The rounded corners of the grouped style make separate groups of information easy to see, even when users are scrolling quickly.
In iOS 6.0 and later, you can use a header-footer view—that is, an instance of
UITableViewHeaderFooterView—to display text or a custom view in a header or footer. To learn how to use a header-footer view in your code, see UITableViewHeaderFooterView Class Reference.
Display an index to facilitate lookup. The plain style supports an index view that helps users quickly find what they need. The index consists of a column of entries—usually letters in an alphabet—that floats on the right edge of the screen. Users tap or drag to an index entry to reveal the corresponding area in the list.
If you include an index, avoid using table-view elements that display on the right edge of the table (such as the disclosure indicator), because these elements interfere with the index.
Always provide feedback when users select a list item. Users expect a table row to highlight briefly when they tap a selectable item in it. After tapping, users expect a new view to appear or the row to display a checkmark to indicate that the item has been selected or enabled.
In rare cases, a row might remain highlighted when secondary details or controls related to the row item are displayed in the same screen. However, this isn’t encouraged because it’s difficult to display simultaneously a list of choices, a selected item, and related details or controls without creating an uncomfortably crowded layout.
Follow these guidelines when you use table views:
Consider animating the changes users make to list items to provide feedback and strengthen the user’s sense of direct manipulation. In Settings, for example, when users turn off the automatic date and time setting (by selecting Off in General > Date & Time > Set Automatically), the list group expands smoothly to display two new items, Time Zone and Set Date & Time.
If table content is extensive or complex, avoid waiting until all the data is available before displaying anything. Instead, fill the onscreen rows with textual data immediately and display more complex data (such as images) as they become available. This technique gives users useful information right away and increases the perceived responsiveness of your app.
Consider displaying “stale” data while waiting for new data to arrive. Although this technique isn’t recommended for apps that handle frequently changing data, it can help more static apps give users something useful right away. Before you decide to do this, gauge how often the data changes and how much users depend on seeing fresh data quickly.
If the data is slow-loading or complex, tell users that processing is continuing. If a table contains only complex data, it might be difficult to display anything useful right away. In these rare cases, it's important to avoid displaying empty rows, because this can imply that your app has stalled. Instead, the table should display a spinning activity indicator along with an informative label, such as “Loading...”, centered in the screen. Doing this reassures users that processing is continuing.
Avoid variable row heights in a plain table. Variable row heights are acceptable in grouped tables, but they can make a plain table look cluttered and uneven.
Don’t use white to create areas of transparency in an image. The background of a table row isn’t pure white, so white areas in an image will appear white; they won’t blend in with the background and appear transparent. If you want some areas in an image to look transparent, be sure to make them transparent.
If appropriate, use a custom title for the Delete button. If it helps users to better understand the way your app works, you can create a title to replace the system-provided Delete title.
Generally, use grouped tables for the value 1 and value 2 cell styles. Although you can use any cell style with either type of table, the value 1 and value 2 cell styles look best in grouped tables. For example, Settings uses the value 1 cell style:
iPhone Contacts uses the value 2 cell style:
As much as possible, use succinct text labels to avoid truncation. Truncated words and phrases can be difficult for users to scan and understand. Text truncation is automatic in all table-cell styles, but it can present more or less of a problem, depending on which cell style you use and on where truncation occurs.
In the default cell style, short text labels are best. If truncation is unavoidable, try to ensure that the most important information is contained in the first few words.
In the subtitle cell style, too, short text labels are best. If truncation is unavoidable, put the most important information in the first few words. If the detail text label is truncated, users aren’t likely to mind too much because they view it as information that enhances or supplements the item named by the text label.
In the value 1 cell style, text truncation can be difficult to avoid—because both labels are on the same line—but it’s worth the effort. Otherwise, you lose the active space between the labels that helps users understand the relationship between the two pieces of information.
In the value 2 cell style, truncated text labels blunt the sharpness of the vertical strip of white space between them and the detail text. When the white-space width is inconsistent from row to row, it’s harder for users to scan the information in the detail text.
You might be able to avoid text truncation by increasing the height of a table row to accommodate text wrapping, but this can be problematic for these reasons:
You have to programmatically check the text length and decide if wrapping might occur. You must make this determination for both portrait and landscape orientation, because the table width affects text wrapping.
Text might wrap in one orientation, but not the other, which is something you should avoid.
Variable row heights can negatively impact the overall table view performance in your app, regardless of table-view style.
If you want to lay out your table rows in a nonstandard way, it’s better to create a custom table-cell style than to significantly alter a standard one. To learn how to create your own cells, see “Customizing Cells” in Table View Programming Guide for iOS.
A text view accepts and displays multiple lines of text.
To learn more about defining a text view in your code, see UITextView Class Reference.
Appearance and Behavior
A text view is a rounded rectangle of any height. A text view supports scrolling when the content is too large to fit inside its bounds.
If the text view supports user editing, a keyboard appears when the user taps inside the text view. The keyboard’s input method and layout are determined by the user’s language settings. When users tap the button labeled “.?123,” the keyboard changes to display numbers, punctuation marks, and a few common symbols.
You have control over the font, color, and alignment of the text in a text view. The default font is the system font and the default color is black, because these tend to be the most readable. The default for the alignment property is left (you can change it to center or right).
Always make sure the text is easy to read. Although you can use attributed strings to combine multiple fonts, colors, and alignments in creative ways, it’s essential to maintain the readability of the text.
Specify different keyboard types to accommodate different types of content you expect users to enter. For example, you might want to make it easy for users to enter a URL, a PIN, or a phone number. Note, however, that you have no control over the keyboard’s input method and layout, which are determined by the user’s language settings. iOS provides several different keyboard types, each designed to facilitate a different type of input. To learn about the keyboard types that are available, see the documentation for
UIKeyboardType. To learn more about managing the keyboard in your app, read “Managing the Keyboard” in iOS App Programming Guide.
A web view is a region that can display rich HTML content (shown here between the navigation bar and toolbar in Mail on iPhone).
To learn more about defining a web view in your code, see UIWebView Class Reference.
Appearance and Behavior
In addition to displaying web content, a web view performs some automatic processing on web content, such as converting a phone number to a phone link.
If you have a webpage or web app, you might decide to use a web view to implement a simple iOS app that provides a wrapper for your webpage or web app. If you plan to use a web view to access web content that you control, be sure to read Safari Web Content Guide.
Avoid using a web view to create an app that looks and behaves like a mini web browser. People expect to use Safari on iOS to browse web content, so replicating this broad functionality within your app is not recommended.
Alerts, Action Sheets, and Modal Views
Alerts, action sheets, and modal views are temporary views that appear when something requires the user’s attention or when additional choices or functionality need to be offered. People cannot interact with an app while one of these views is on the screen.
To learn about working with these types of views in your code, see “Presenting View Controllers from Other View Controllers” in View Programming Guide for iOS.
An alert gives people important information that affects their use of the app or the device.
To learn about using an alert in your code, see UIAlertView Class Reference.
Appearance and Behavior
An alert pops up in the middle of the app screen and floats above its views. The unattached appearance of an alert emphasizes the fact that its arrival is due to some change in the app or the device, not necessarily as the result of the user’s most recent action. Users must dismiss the alert before they can continue using the currently running app.
An alert always contains at least one button, which users tap to dismiss the alert. By default, an alert displays a title and might also display a message that provides additional information. An alert can contain one or two text fields, one of which can be a secure text-input field. The background appearance of an alert is system-defined and can’t be changed.
The infrequency with which alerts appear helps users take them seriously. Be sure to minimize the number of alerts your app displays and ensure that each one offers critical information and useful choices.
Avoid creating unnecessary alerts. In general, alerts are unnecessary if they:
Merely increase the visibility of some information, especially information that’s related to the standard functioning of your app.
Instead, design an eye-catching way to display the information that harmonizes with your app’s style.
Update users on tasks that are progressing normally.
Ask for confirmation of user-initiated actions.
To get confirmation for an action the user initiated—even a potentially risky action such as deleting a contact—you should use an action sheet.
Inform users of errors or problems about which they can do nothing.
Although it might be necessary to use an alert to tell users about a critical problem they can’t fix, it’s better to integrate such information into the UI, if possible. For example, instead of telling users every time a server connection fails, display the time of the last successful connection.
You can specify the text of the required title and optional message, the number of buttons, and the button contents in an alert. You can’t customize the width or the background appearance of the alert view itself, or the alignment of the text (it’s center-aligned).
As you read the alert-text design guidelines, it’s useful to know the following definitions:
Title-style capitalization means that every word is capitalized, except articles, coordinating conjunctions, and prepositions of four or fewer letters when they aren’t the first word.
Sentence-style capitalization means that the first word is capitalized, and the rest of the words are lowercase unless they are proper nouns or proper adjectives.
Succinctly describe the situation and explain what people can do about it. Ideally, the text you write gives people enough context to understand why the alert has appeared and to decide which button to tap.
Keep the title short enough to display on a single line, if possible. A long alert title is difficult for people to read quickly, and it might get truncated or force the alert message to scroll.
Avoid single-word titles that don’t provide any useful information, such as “Error” or “Warning.”
When possible, use a sentence fragment. A short, informative statement is often easier to understand than a complete sentence.
Don’t hesitate to be negative. People understand that most alerts tell them about problems or warn them about dangerous situations. It’s better to be negative and direct than it is to be positive but oblique.
Avoid using “you,” “your,” “me,” and “my” as much as possible. Sometimes, text that identifies people directly can be ambiguous and can even be interpreted as an insult.
Use capitalization and punctuation appropriately. Specifically:
Use title-style capitalization and no ending punctuation when the title is a sentence fragment or it consists of a single sentence that is not a question.
If the title consists of a single sentence that is a question, use sentence-style capitalization and an ending question mark. In general, consider using a question for an alert title if it allows you to avoid adding a message.
If the title consists of two or more sentences, use sentence-style capitalization and appropriate ending punctuation for each sentence. A two-sentence alert title should seldom be necessary, although you might consider it if it allows you to avoid adding a message.
If you provide an optional alert message, create a short, complete sentence. Use sentence-style capitalization and appropriate ending punctuation.
Avoid creating an alert message that is too long. If possible, keep the message short enough to display on one or two lines. If the message is too long it will scroll, which is not a good user experience.
Avoid lengthening your alert text with descriptions of which button to tap, such as “Tap View to see the information.” Ideally, the combination of unambiguous alert text and logical button labels gives people enough information to understand the situation and their choices. However, if you must provide detailed guidance, follow these guidelines:
Be sure to use the word “tap” (not “touch” or “click” or “choose”) to describe the selection action.
Don’t enclose a button title in quotation marks, but do preserve its capitalization.
Be sure to test the appearance of your alert in both orientations. Because the height of an alert is constrained in landscape, it might look different from the way it looks in portrait. It’s recommended that you optimize the length of the alert text so that it looks good and avoids scrolling in both orientations.
Generally, use a two-button alert. A two-button alert is often the most useful, because it’s easiest for people to choose between two alternatives. A single button alert is rarely helpful because it informs without giving people any control over the situation. An alert that contains three or more buttons is significantly more complex than a two-button alert and should be avoided if possible. In fact, if you find that you need to offer people more than two choices, you should consider using an action sheet instead (to learn how to use an action sheet, see “Action Sheet”).
Use alert button colors appropriately. Alert buttons are colored either dark or light. In an alert with two buttons, the button on the left is always dark-colored and the button on the right is always light-colored. In a one-button alert, the button is always light-colored.
In a two-button alert that proposes a potentially risky action, the button that cancels the action should be on the right and light-colored.
In a two-button alert that proposes a benign action that people are likely to want, the button that cancels the action should be on the left and dark-colored.
Give alert buttons short, logical titles. The best titles consist of one or two words that make sense in the context of the alert text. Follow these guidelines as you create titles for alert buttons:
As with all button titles, use title-style capitalization and no ending punctuation.
Use verbs and verb phrases, such as “Cancel,” “Allow,” “Reply,” or “Ignore” that relate directly to the alert text.
Use “OK” for a simple acceptance option if there is no better alternative. Avoid using “Yes” or “No.”
Avoid “you,” “your,” “me,” and “my” as much as possible. Button titles that use these words are often both ambiguous and patronizing.
An action sheet displays a set of choices related to a task the user initiates (shown below on iPhone).
To learn how to define an action sheet in your code, see UIActionSheet Class Reference.
Appearance and Behavior
An action sheet has two different appearances. On iPhone, an action sheet always emerges from the bottom of the screen and hovers over the app’s views (an action sheet for Safari on iPhone is shown above). The side edges of an action sheet are anchored to the sides of the screen, which reinforces its connection to the app and to the user’s most recent action.
On iPad, an action sheet is always displayed within a popover; it never has full-screen width (to learn more about popovers, see “Popover (iPad Only)”). An action sheet can cause a popover to appear, or it can appear within a popover that’s already open. In both cases, there’s a strong visual connection between the action sheet and the user’s action. For example, the action sheet shown here is displayed when the user taps the Mail Reply button on iPad.
An action sheet always contains at least two buttons that allow users to choose how to complete their task. When users tap a button, the action sheet disappears. An action sheet doesn’t include a title or explanatory text, because it appears in immediate response to a user action.
Use an action sheet to:
Provide alternate ways to complete a task. An action sheet lets you to provide a range of choices that make sense in the context of the current task, without giving these choices a permanent place in the UI.
Get confirmation before completing a potentially dangerous task. An action sheet prompts users to think about the potentially dangerous effects of the step they’re about to take and gives them some alternatives. This type of communication is particularly important on iOS devices because sometimes users tap controls without meaning to.
On iPhone, coordinate the action sheet background appearance with the navigation bars and toolbars. Use the translucent black background if your app uses black navigation bars and toolbars. Use the default blue background if your navigation bars and toolbars are the default blue color.
All action sheets in your iPhone app should have the same background color.
On iPhone, include a Cancel button so that users can easily and safely abandon the task. Place the Cancel button at the bottom of the action sheet to encourage users to read through all the alternatives before making a choice. By default, the appearance of the Cancel button coordinates with the background of the action sheet.
On iPad, choose whether to display an action sheet with animation or without animation.
Display an action sheet without animation to provide alternatives related to a task that the user initiates from outside a popover. Without animation, an action sheet and its popover appear simultaneously. When you display an action sheet this way, the popover’s arrow points to the control or area the user tapped to initiate the task.
Don’t include a Cancel button when the action sheet is displayed without animation, because people can tap outside the popover to dismiss the action sheet without selecting one of the other alternatives.
Display an action sheet with animation to provide alternatives related to a task that the user initiates from within an open popover. With animation, an action sheet slides up over an open popover’s content.
An animated action sheet should include a Cancel button, because people need to be able to dismiss the action sheet without closing the popover.
On both devices, use the red button color if a potentially destructive action can be performed. Display a red button at the top of the action sheet, because the closer to the top of the action sheet a button is, the more eye-catching it is. And on iPhone, the farther a destructive button is from the bottom of an action sheet, the less likely users are to tap it when they’re aiming for the Home button.
Avoid making users scroll through an action sheet. If you include too many buttons in an action sheet, users must scroll to see all actions. This is a disconcerting experience for users, because they must spend extra time considering each choice. Also, it can be very difficult for users to scroll without inadvertently tapping a button.
A modal view (that is, a view presented modally) provides self-contained functionality in the context of the current task or workflow.
To learn more about defining a modal view in your code, see UIViewController Class Reference.
Appearance and Behavior
A modal view occupies the entire app screen, which strengthens the user’s perception of entering a separate, transient mode in which they can accomplish something. On iPad, a modal view might also occupy the entire area of a parent view, such as a popover.
A modal view can display text if appropriate, and contains the controls necessary to perform the task. A modal view generally displays a button that completes the task and dismisses the view, and a Cancel button users can tap to abandon the task.
Use a modal view when you need to offer the ability to accomplish a self-contained task related to your app’s primary function. A modal view is especially appropriate for a multistep subtask that requires UI elements that don’t belong in the main app user interface all the time.
On iPad, choose a modal view style that suits the current task and the visual style of your app. You can use any of these styles, defined here:
Full screen. Covers the entire screen. This style is good for presenting a potentially complex task that people can complete within the context of the modal view. For example, the Music app uses this style for its Genius playlist creation task.
Page sheet. Has a fixed width of 768 points; the sheet height is the current height of the screen. In portrait, the modal view covers the entire screen; in landscape, the screen that is visible on both sides of the modal view is dimmed to prevent user interaction. For example, Mail uses this style for its message composition task.
Form sheet. Has fixed dimensions of 540 x 620 points and is centered in the screen. The area of the screen that is visible outside the modal view is dimmed to prevent user interaction. When the keyboard is visible in landscape, a form sheet view moves up to just below the status bar. This style is good for gathering structured information from the user.
Current context. Uses the same size as its parent view. This style is good for displaying a modal view within a split view pane, popover, or other non–full–screen view.
On iPad, don’t display a modal view on top of a popover. With the possible exception of an alert, nothing should display on top of a popover. In rare cases when you might need to display a modal view as a result of an action the user takes in a popover, close the popover before you open the modal view.
On iPhone, coordinate the overall look of a modal view with the appearance of your app. For example, a modal view often includes a navigation bar that contains a title and buttons that cancel or complete the modal view’s task. When this is the case, the navigation bar should have the same background appearance as the navigation bar in the app.
On both devices, display a title that identifies the task, if appropriate. You might also display text in other areas of the view that more fully describes the task or provides some guidance. For example, the Messages app on iPhone presents a modal view when users want to compose a text message. This modal view displays a navigation bar with the same background as the app navigation bar and with the title New Message.
On both devices, choose an appropriate transition style for revealing the modal view. Use a style that coordinates with your app and enhances the user’s awareness of the temporary context shift that the modal view represents. To do this, you can specify one of the following transition styles:
Vertical. The modal view slides up from the bottom edge of the screen and slides back down when dismissed. (This is the default transition style.)
Flip. The current view flips horizontally from right to left to reveal the modal view. Visually, the modal view looks as if it is the back of the current view. When the modal view is dismissed, it flips horizontally from left to right, revealing the previous view.
Partial curl. The partial-curl transition style is similar to the page-curl behavior of Maps on iPhone. Visually, one corner of the current view curls up to reveal the modal view underneath. When the user leaves the modal view, the current view uncurls to its original position. You might want to use this style when the modal view you reveal is not large and does not require much user interaction, such as a view that holds configuration options.
Note that a modal view revealed by a partial-curl transition cannot itself reveal another modal view.
If you decide to vary the transition styles of the modal views in your app, avoid doing so merely for the sake of variety. Users are quick to notice such differences and will assume that they mean something. For this reason, it’s best to establish a logical, consistent pattern that users can easily detect and remember, and avoid changing transition styles without a good reason.
Controls are UI elements that users view to get information, or interact with to perform an action. iOS provides a large number of controls that you can use in your app.
An activity indicator shows that a task or process is progressing (shown here with a label).
To learn how to define an activity indicator in your code, see UIActivityIndicatorView Class Reference.
Appearance and Behavior
An activity indicator spins while a task is progressing and disappears when the task completes. Users do not interact with an activity indicator. By default, an activity indicator is white.
Use an activity indicator in a toolbar or a main view to show that processing is occurring, without suggesting when it will finish.
Don’t display a stationary activity indicator, because users associate this with a stalled process.
Use an activity indicator when it’s more important to reassure users that their task or process has not stalled than it is to suggest when processing will finish.
If appropriate, customize the size and color of an activity indicator to coordinate with the background of the view in which it appears.
A date picker displays components of date and time, such as hours, minutes, days, and years.
To learn how to define a date picker in your code, see UIDatePicker Class Reference.
Appearance and Behavior
A date picker can have up to four independent wheels, each of which displays values in a single category, such as month or hour. Users flick or drag to spin each wheel until it displays the desired value beneath the clear selection bar that stretches across the middle of the picker. The final value comprises the values displayed in each wheel.
The overall size of a date picker is fixed at the same size as the iPhone keyboard.
A date picker has four modes, each of which displays a different number of wheels that contain a set of different values.
Date and time. The date and time mode displays wheels for the calendar date, hour, and minute values, with the optional addition of a wheel for the AM/PM designation. This is the default mode.
Time. The time mode displays wheels for the hour and minute values, with the optional addition of a wheel for the AM/PM designation.
Date. The date mode displays wheels for the month, day, and year values.
Countdown timer. The countdown timer mode displays wheels for the hour and minute. You can specify the total duration of a countdown, up to a maximum of 23 hours and 59 minutes.
Use a date picker to let users pick (instead of type) a date or time value that consists of multiple parts, such as the day, month, and year. A date picker is easy to use because the values in each part have a relatively small range and users already know what the values are.
If it makes sense in your app, change the interval in the minutes wheel. By default, a minutes wheel displays 60 values (0 to 59). If you need to display a coarser granularity of choices, you can set a minutes wheel to display a larger minute interval, as long as the interval divides evenly into 60. For example, you might want to display the quarter-hour intervals 0, 15, 30, and 45.
On iPad, present a date picker only within a popover. A date picker is not suitable for the main screen.
Contact Add Button
A Contact Add button lets the user add an existing contact to a text field or other text-based view (shown here in the To field of Messages).
To learn how to define a Contact Add button in your code, see UIButton Class Reference.
Appearance and Behavior
A Contact Add button is a circular button with a blue background and a white plus symbol. When users tap the button, a contacts list is revealed; when they choose a contact from the list, the list closes and the contact is added to the view that contains the Contact Add button.
Use a Contact Add button to give users an easy way to access a contact without using the keyboard. For example, users can tap the Contact Add button in the To field of the Mail compose view instead of typing the recipient’s name.
Because the Contact Add button functions as an alternative to typing contact information, it’s not appropriate to use the button in a view that does not accept keyboard input.
Detail Disclosure Button
A Detail Disclosure button reveals additional details or functionality related to an item (shown here inside a map annotation view).
To learn how to define a Detail Disclosure button (
UITableViewCellAccessoryDetailDisclosureButton) in your code, see UITableViewCell Class Reference and UIButton Class Reference.
Appearance and Behavior
A Detail Disclosure button is a circular button that has a blue background and a white “>” symbol. Users tap a Detail Disclosure button to reveal additional information or functionality related to a specific item. The additional details or functionality are revealed in a separate view.
When a Detail Disclosure button appears in a table row, tapping elsewhere in the row does not activate the Detail Disclosure button; instead, it selects the row item or results in app-defined behavior.
Typically, you use a Detail Disclosure button in a table view to give users a way to see more details or functionality related to a list item. However, you can also use this element in other types of views to provide a way to reveal more information or functionality related to an item in that view.
An Info button reveals configuration details about an app, often on the back of the current view.
To learn more about defining an Info button in your code, see UIButton Class Reference.
Appearance and Behavior
iOS includes two styles of Info button: a dark-colored “i” on a light background and a light-colored “i” on a dark background. An Info button automatically glows briefly when the user taps it. When tapped, an Info button results in an immediate action, such as flipping a view in an app to reveal the back.
Use an Info button to reveal configuration details or options about an app. You can use the style of Info button that coordinates best with the UI of your app.
On iPhone, use an Info button to flip the screen and reveal more information. Typically, the back of a screen displays configuration options that don’t need to be in the main UI.
On iPad, avoid using an Info button to flip the entire screen. Instead, you might use an Info button to show people that they can access an expanded view that contains related information or additional details.
A label displays static text.
To learn more about defining labels in your code, see UILabel Class Reference.
Appearance and Behavior
A label displays any amount of static text. Users do not interact with labels except, potentially, to copy the text.
You can use a label to name or describe parts of your UI or to provide short messages to the user. A label is best suited to display a relatively small amount of text.
Take care to make your labels legible. Don’t sacrifice clarity for fancy fonts or showy colors.
Network Activity Indicator
A network activity indicator appears in the status bar and shows that network activity is occurring (shown here to the left of the time).
In your code, you use the
networkActivityIndicatorVisible to control the indicator’s visibility.
Appearance and Behavior
The network activity indicator spins in the status bar while network activity proceeds. It disappears when network activity stops. Users do not interact with the network activity indicator.
Display the network activity indicator to provide feedback when your app accesses the network for more than a couple of seconds. If the operation finishes sooner than that, you don’t have to show the network activity indicator, because the indicator would be likely to disappear before users notice its presence.
A page control indicates how many views are open and which one is currently visible.
To learn more about defining a page control in your code, see UIPageControl Class Reference.
Appearance and Behavior
A page control displays an indicator dot for each currently open peer view in an app. From left to right, the dots represent the order in which the views were opened (the leftmost dot represents the first view). By default, the dot that represents the currently visible view is opaque white and the dots that represent all other views are translucent white. Users tap to the left or the right of the current dot to see the previous or next open view.
The dots of a page control do not shrink or squeeze together as more appear. A screen in portrait orientation can accommodate approximately 20 dots; if you try to display more dots than will fit in the screen, they will be clipped.
Use a page control when each view in your app is a peer of every other view. Don’t use a page control if your app displays information in a hierarchy of views, because a page control does not help users retrace their steps through a specific path.
Vertically center a page control between the bottom edge of an open view and the bottom edge of the screen, where it is always visible without getting in users’ way. Be sure to avoid trying to display too many dots for the current screen orientation.
If you use custom tinting, be sure to define a tint for the current dot and a tint for all other dots. If you supply only one of these tints, the other tint will use the default color. Also, if you want to replicate the translucent appearance of the non current-page dots, be sure to supply a tint with an alpha value of less than 1.0.
On iPad, investigate ways to display your content on a single screen. On the large iPad screen multiple parallel screens don’t work as well, so the need for the page control is decreased.
A picker displays a set of values from which a user picks one.
To learn more about defining a picker in your code, see UIPickerView Class Reference.
Appearance and Behavior
A picker is a generic version of the date picker. As with a date picker, users spin the wheel (or wheels) of a picker until the value they want appears. The overall size of a picker, including its background, is fixed at the same size as the keyboard on iPhone. (For more information about the date picker, see “Date Picker.”)
Use a picker to make it easy for people to choose from a set of values. It’s often best to use a picker when people are familiar with the entire set of values. This is because many, if not most, of the values are hidden when the wheel is stationary. If you need to provide a large set of choices that aren’t well known to your users, a picker might not be the appropriate control.
Consider using a table view, instead of a picker, if you need to display a very large number of values. This is because the greater height of a table view makes scrolling faster.
Use the translucent selection bar to display contextual information, such as a unit of measurement. Do not display such labels above the picker or on the wheel itself.
On iPad, present a picker only within a popover. A picker is not suitable for the main screen.
A progress view shows the progress of a task or process that has a known duration (shown here with a label).
To learn more about defining a progress view in your code, see UIProgressView Class Reference.
Appearance and Behavior
iOS provides two styles of progress view. The appearance of each style is very similar, except for height.
The default style is white and has a weight that makes it suitable for use in an app’s main content area.
The bar style is thinner than the default style, which makes it well-suited for use in a toolbar. The bar style is also white by default.
As the task or process proceeds, the track of the progress view is filled from left to right. At any given time, the proportion of filled to unfilled area in the progress view gives people an indication of how soon the task or process will finish. Users don’t interact with a progress view.
Use a progress view to give feedback on a task that has a well-defined duration, especially when it’s important to show approximately how long the task will take. When you display a progress view, you tell the user that their task is being performed and you give them enough information to decide if they want to wait until the task is complete or cancel it.
If appropriate, customize the appearance of a progress view to coordinate with the style of your app. You can specify a custom tint or image for both the track and the fill of a progress view.
A refresh control performs a user-initiated content refresh—typically in a table (shown here above the mailbox list).
To learn more about defining a refresh control in your code, see UIRefreshControl Class Reference.
Appearance and Behavior
By default, a refresh control is hidden until the user initiates a refresh action by dragging down from the top edge of a table. The refresh control smoothly changes its appearance while the user drags it, lengthening during the drag and snapping back to its original circular shape when the refresh begins. During a refresh operation, the refresh control looks similar to an activity indicator.
A refresh control can also display a title and use a custom tint.
Use a refresh control to give users a consistent way to tell a table or other view to update its contents immediately, without waiting for the next automatic update. The following guidelines can help you ensure that your refresh control enhances the user’s experience.
Don’t stop performing automatic content updates just because you provide a refresh control. Even though users appreciate being able to request that an update be performed now, they still appreciate content that refreshes itself automatically. And if you rely on users to initiate all refreshes, users who are unaware of the refresh control are likely to wonder why your app displays stale data. In general, you want to give users the option to refresh contents immediately; you don’t want to make users responsible for every update.
Supply a short title only if it adds value. In particular, don’t use the title to describe how to use the refresh control.
Rounded Rectangle Button
A rounded rectangle button performs an app-specific action.
To learn more about defining a rounded rectangle button in your code, see UIButton Class Reference.
Appearance and Behavior
A rounded rectangle button has a corner radius that is the same as the corner radius of a grouped table view. By default, the button’s background is white.
Use a rounded rectangle button to initiate an action. When you supply a title for a rounded rectangle button, follow this approach:
Use title-style capitalization (that is, capitalize every word except articles, coordinating conjunctions, and prepositions of four or fewer letters)
Avoid creating a title that is too long. Overly long text gets truncated, which can make it difficult for users to understand it.
You can specify the title or image to display in a rounded rectangle button—for some guidelines on providing a resizable background image, see “Tips for Creating Resizable Images”—and you can tell the button to highlight when it’s tapped and specify how the title or image should look when the button highlights. You can also supply a tint for the button’s background and colors for the title and title shadow.
A scope bar—which is available only in conjunction with a search bar—allows users to define the scope of a search (shown here below a search bar).
To learn more about defining a search bar and scope bar in your code, see UISearchBar Class Reference.
Appearance and Behavior
When a search bar is present, a scope bar can appear near it. The scope bar displays below the search bar, regardless of orientation, unless you use a search display controller in your code (for more information on the way this works, see UISearchDisplayController Class Reference). When you use a search display controller, the scope bar is displayed within the search bar to the right of the search field when the device is in landscape orientation (in portrait orientation, it’s below the search bar).
The scope bar contains buttons users can tap to select a scope for the search, and it adopts the same appearance you specify for the search bar.
It can be useful to display a scope bar when there are clearly defined or typical categories in which users might want to search. For example, users often want to narrow their search to one field in an email message.
You can customize a scope bar by supplying a background image. In addition, you can define different appearances for the enabled and disabled states of the scope bar buttons and the dividers between them.
A search bar accepts text from users, which can be used as input for a search (shown here with placeholder text).
To learn how to define a search bar in your code, see UISearchBar Class Reference.
Appearance and Behavior
A search bar looks like a text field with rounded ends. By default, a search bar displays the search icon on the left side. When the user taps a search bar, a keyboard appears; when the user is finished typing search terms, the input is handled in an app-specific way.
In addition, a search bar can display a few optional elements:
Placeholder text. This text might state the function of the control (for example, “Search”) or remind users in what context they are searching (for example, “Google”).
The Bookmarks button. This button can provide a shortcut to information users want to easily find again. For example, the Bookmarks button in the Maps search mode gives access to bookmarked locations, recent searches, and contacts.
The Bookmarks button is visible only when there is no user-supplied or nonplaceholder text in the search bar, because the Clear button is visible when there is text in the search bar that users might want to erase.
The Clear button. Most search bars include a Clear button that allows users to erase the contents of the search bar with one tap. (The Clear button is a gray circle with a white “x” in it.)
When the search bar contains any nonplaceholder text, the Clear button is visible so users can erase the text. If there is no user-supplied or nonplaceholder text in the search bar, the Clear button is hidden because there is no need to erase the contents of the search bar.
The results list icon. This icon indicates the presence of search results. When users tap the results list icon, your app can display the results of their most recent search.
A descriptive title, called a prompt, that appears above the search bar. For example, a prompt can be a short phrase that provides introductory or app-specific context for the search bar.
Use a search bar to enable search in your app. Do not use a text field to enable search because it doesn’t have the standard search-bar appearance that users expect.
You can customize a search bar by specifying a custom background appearance and providing custom accessory images. For the background, you can supply a tint or an image, or you can choose one of the following standard background colors:
Blue (this is the default gradient that coordinates with the default appearance of toolbars and navigation bars)
If you decide to supply a background image, it can be a good idea to supply a resizable image; to learn more about creating one, see “Tips for Creating Resizable Images.”
A segmented control is a linear set of segments, each of which functions as a button that can display a different view.
To learn more about defining a segmented control in your code, see UISegmentedControl Class Reference.
Appearance and Behavior
The length of a segmented control is determined by the number of its segments; the height of a segmented control is fixed. The width of each segment is proportional, based on the total number of segments. When users tap a segment, the segment displays a selected appearance.
Use a segmented control to offer closely related, but mutually exclusive choices.
Make sure that each segment is easy to tap. To maintain a comfortable hit region of 44 x 44 points for each segment, you need to limit the number of segments. On iPhone, a segmented control should have five or fewer segments.
As much as possible, maintain consistency in the size of each segment’s contents. Because all segments in a segmented control have equal width, it doesn’t look good if the content fills some segments, but not others.
Avoid mixing text and images in a single segmented control. A segmented control can contain text or images. An individual segment can contain either text or an image, but not both. In general, it’s best to avoid putting text in some segments and images in other segments of a single segmented control.
If appropriate, customize the appearance of a segmented control. For example, you can supply a custom background tint or image. If you supply a background image, you can also specify a different background image to use for a segment’s selected appearance and a custom appearance for the dividers between segments. (In some cases, it can be a good idea to supply a resizable background image; to learn more about creating one, see “Tips for Creating Resizable Images.”)
If you customize the background appearance of a segmented control, you should make sure that the automatic centering of the control’s text or image content still looks good. If necessary, you can use the bar metrics APIs to adjust the positioning of the content inside the segmented control (to learn more about specifying bar metrics, see the appearance-customization APIs described in UISegmentedControl).
A slider allows users to make adjustments to a value or process throughout a range of allowed values (shown here with custom images on the left and the right).
To learn more about defining a slider in your code, see UISlider Class Reference.
Appearance and Behavior
A slider consists of a horizontal track and a thumb (a circular control that the user can slide) and can include optional images that convey the meaning of the right and left values. When people drag the thumb along the slider, the value or process is updated continuously and is displayed in the track.
Use a slider to give users fine-grained control over values they can choose or the operation of the current process.
If appropriate, customize the appearance of a slider. For example, you can do any of the following:
Set the width of a slider to fit in with the UI of your app.
Define the appearance of the thumb, so that users can see at a glance whether the slider is active.
Supply images to appear at both ends of the slider to help users understand what the slider does.
Typically, these custom images correspond to the minimum and maximum values of the value range that the slider controls. A slider that controls font size, for example, could display a very small character at the minimum end and a very large character at the maximum end.
Define a different appearance for the track, depending on which side of the thumb it is on and which state the control is in.
A stepper increases or decreases a value by a constant amount.
To learn more about defining a stepper in your code, see UIStepper Class Reference.
Appearance and Behavior
A stepper is a two-segment control in which one segment displays a plus symbol and the other segment displays a minus symbol. Users tap a segment to increase or decrease a value. A stepper does not display the value that the user changes.
In general, use a stepper when users might need to make small adjustments to a value. For example, it makes sense to use a stepper to set the number of copies in the Printer Options action sheet, because users rarely change this value by very much. On the other hand, it would not make sense to use a stepper to help users choose a page range, because those values can vary a lot.
Make it obvious which value the stepper affects. A stepper does not display any values, so you need to make sure that users know which value they’re changing when they use a stepper.
If appropriate, customize the appearance of a stepper to coordinate with the style of your app. You can specify a custom tint for the control or you can supply custom images for the background and divider and for the increment and decrement symbols.
A switch presents two mutually exclusive choices or states (used in table views only).
To learn more about defining a switch in your code, see UISwitch Class Reference.
Appearance and Behavior
A switch displays the value that is currently in effect; users slide the control to select (and reveal) the other value. Users can also tap the control to switch between choices.
Use a switch in a table row to give users two simple, diametrically opposed choices that determine the state of something, such as yes/no or on/off. Use a predictable pair of values so that users don’t have to slide the control to discover what the other value is.
You can use a switch control to change the state of other UI elements in the view. Depending on the choice users make, new list items might appear or disappear, or list items might become active or inactive.
If appropriate, customize the appearance of a switch. You can supply a tint for the on-state appearance that coordinates with the look of your app.
A text field accepts a single line of user input (shown here with a purpose description and placeholder text).
To learn more about defining a text field and customizing it to display images and buttons, see UITextField Class Reference.
Appearance and Behavior
A text field is a fixed-height field with rounded corners. When users tap a text field a keyboard appears; when users dismiss the keyboard, the text field handles the input in an app-specific way.
Use a text field to get a small amount of information from the user. Before you decide to use a text field, consider whether there are other controls that might make inputting the information easier, such as a picker or a list.
Customize a text field if it helps users understand how they should use it. For example, you can display custom images in the left or right sides of the text field, or add a system-provided button, such as the Bookmarks button. In general, you should use the left end of a text field to indicate its purpose and the right end to indicate the presence of additional features, such as bookmarks.
Display the Clear button in the right end of a text field when appropriate. When this element is present, tapping it clears the contents of the text field, regardless of any other image you might display over it.
Display a hint in the text field if it helps users understand its purpose, such as “Name” or “Address.” A text field can display such placeholder text when there is no other text in the field.
Specify a keyboard type that’s appropriate for the type of content you expect users to enter. For example, you might want to make it easy for users to enter a URL, a PIN, or a phone number. iOS provides several different keyboard types, each designed to facilitate a different type of input. To learn about the keyboard types that are available, see the documentation for
UIKeyboardType. To learn more about managing the keyboard in your app, read “Managing the Keyboard” in iOS App Programming Guide. Note that you have no control over the keyboard’s input method and layout, because these attributes are determined by the user’s language settings.
System-Provided Buttons and Icons
To promote a consistent user experience (and to make your job easier) iOS provides numerous standard buttons for use in navigation bars and toolbars, and icons for use in tab bars.
You should familiarize yourself with the guidelines that govern the use of the system-provided buttons and icons regardless of the type of app you’re developing, so that you can:
Use the system-provided items correctly
Avoid designing a custom icon that looks too similar to a system-provided icon
If you can’t find a system-provided toolbar or navigation bar button or tab bar icon that has the appropriate meaning for a specific function in your app, you should design a custom button or icon. For guidelines to help you do this, see “Icons for Navigation Bars, Toolbars, and Tab Bars.”
Standard Buttons for Use in Toolbars and Navigation Bars
iOS makes available many of the standard buttons users see in toolbars and navigation bars. These buttons, shown in Table 7-2, are available in two styles, each of which is appropriate for the specific usages described here:
Bordered style—For example, the Add button in the navigation bar of the Contacts app on iPhone uses bordered style. This style is suitable for both navigation bars and toolbars.
Plain style—For example, the Compose button in the Mail toolbar uses plain style. This style is suitable for toolbars only. In fact, if you specify the plain style for a button in the navigation bar, it is converted to the bordered style.
As with all system-provided buttons, you should avoid using the buttons described in Table 7-2 to represent actions other than those for which they are designed. In particular, avoid choosing a button based on its appearance, without regard for its documented meaning. For a discussion of the reasons why it’s important to use these icons correctly, see “Use UI Elements Consistently.”
To find out which symbol names to use to specify these buttons, see the documentation for
UIBarButtonSystemItem in UIBarButtonItem Class Reference.
Open an action sheet that lists system-provided and app-specific services that act on the specified content
Open an action sheet that displays a photo picker in camera mode
Open a new message view in edit mode
Show app-specific bookmarks
Display a search field
Create a new item
Delete current item
Move or route an item to a destination within the app, such as a folder
Send or route an item to another location
Stop current process or task
Refresh contents (use only when necessary; otherwise, refresh automatically)
Begin media playback or slides
Fast forward through media playback or slides
Pause media playback or slides (note that this implies context preservation)
Move backwards through media playback or slides
In addition to the buttons shown in Table 7-2, you can also use the system-provided Edit, Cancel, Save, Done, Redo, and Undo buttons shown in Table 7-3 to support editing or other types of content manipulation in your app.
To find out which symbol names to use to specify these buttons, see the documentation for
UIBarButtonSystemItem in UIBarButtonItem Class Reference.
Enter an editing or content-manipulation mode
Exit the editing or content-manipulation mode without saving changes
Save changes and, if appropriate, exit the editing or content-manipulation mode
Exit the current mode and save changes, if any
Undo the most recent action
Redo the most recent undone action
The buttons listed in Table 7-3 are suitable for both navigation bars and toolbars, and are available in the bordered style only. If you specify the plain style for one of these buttons, it is converted to the bordered style.
In addition, you can use the system-provided page curl button in a toolbar (for more information, see the documentation for
UIBarButtonSystemItemPageCurl in UIBarButtonItem Class Reference). The page curl button is not available for use in a navigation bar.
The page curl button allows you to give users a way to curl up the bottom corner of a screen to see information underneath. For example, Maps allows people to lift the lower-right corner of a map view to access buttons that manipulate the map.
Don’t use the page curl button to flip the screen. If you need to flip the screen, use the Info button instead (for more information about the Info button, see “Info Button”). Also, make sure that some of the curled-up page is still visible onscreen to emphasize the temporary nature of the action of flipping the screen. If the upper page disappears, the page curl becomes too much like a full-screen transition, and users lose their context.
Standard Icons for Use in Tab Bars
iOS provides the standard icons described in Table 7-4 for use in tab bars.
Show app-specific bookmarks
Show user-determined favorites
Show content featured by the app
Show history of user actions
Show additional tab bar items
Show the most recent item
Show items most popular with all users
Show the items accessed by the user within an app-defined period
Enter a search mode
Show the highest-rated items, as determined by the user
As with all standard buttons and icons, it’s essential to use the tab bar icons in accordance with their documented meanings. In particular, take care to base your usage of an icon on its semantic meaning, not its appearance. This will help your app’s user interface make sense even if the icon associated with a specific meaning changes its appearance. For further reasons why it’s important to use these icons correctly, see “Use UI Elements Consistently.”
To find out which symbol names to use to specify these icons, see the documentation for
UITabBarSystemItem in UITabBarItem Class Reference.
Standard Buttons for Use in Table Rows and Other UI Elements
iOS provides the buttons described in Table 7-5 for use in table rows and other elements.
Display a people picker to add a contact to an item.
Display a new view that contains details about the current item.
Flip to the back of the view to display configuration options or more information.
Note that the Info button is also available as a light-colored “i” in a dark circle.
These buttons should be used according to their defined meaning, as with all standard buttons and icons. In other words, avoid choosing a button based on its appearance, without regard for its documented meaning. For a discussion of the reasons why it’s important to use these buttons correctly, see “Use UI Elements Consistently.”
Although the Detail Disclosure button is usually used in table rows, it can be used elsewhere. For more information about this button, see “Detail Disclosure Button.” iOS also provides a set of controls for use in table rows only; for more information about these, see “Table View.”
For more information on using the ContactAdd and Info buttons in your app, see the documentation for
UIButtonType in UIButton Class Reference. For information on using the DetailDisclosure button in your app, see
UITableViewCellAccessoryDetailDisclosureButton in UITableViewCell Class Reference.)
© 2013 Apple Inc. All Rights Reserved. (Last updated: 2013-05-01)