{"id":46419,"date":"2025-01-13T15:12:55","date_gmt":"2025-01-13T20:12:55","guid":{"rendered":"https:\/\/mjtsai.com\/blog\/?p=46419"},"modified":"2025-01-24T09:33:01","modified_gmt":"2025-01-24T14:33:01","slug":"mac-toolbar-guidelines","status":"publish","type":"post","link":"https:\/\/mjtsai.com\/blog\/2025\/01\/13\/mac-toolbar-guidelines\/","title":{"rendered":"Mac Toolbar Guidelines"},"content":{"rendered":"<p><a href=\"https:\/\/marioaguzman.github.io\/design\/toolbarguidelines\/\">Mario Guzm&aacute;n<\/a> (<a href=\"https:\/\/mastodon.social\/@marioguzman\/113744727780650024\">Mastodon<\/a>, <a href=\"https:\/\/bsky.app\/profile\/marioguzman.bsky.social\/post\/3leku4v456c2a\">Bluesky<\/a>):<\/p>\n<blockquote cite=\"https:\/\/marioaguzman.github.io\/design\/toolbarguidelines\/\"><p>The following sections are general guidelines that describe fundamental Toolbar layout and design principles for Mac applications. Following these guidelines will help you create functional and aesthetically pleasing toolbars that are easy for Mac users to understand and use.<\/p><p>This document will reference a hypothetical Email application to illustrate key points in designing a Toolbar. It will heavily reference classes, structs, and properties in <a href=\"https:\/\/developer.apple.com\/documentation\/appkit\/nstoolbar\">NSToolbar<\/a> and <a href=\"https:\/\/developer.apple.com\/documentation\/appkit\/nstitlebaraccessoryviewcontroller\">NSTitlebarAccessoryViewController<\/a>.<\/p><\/blockquote>\n\n<p><a href=\"https:\/\/mastodon.social\/@marioguzman\/113723581367302739\">Mario Guzm&aacute;n<\/a>:<\/p>\n<blockquote cite=\"https:\/\/mastodon.social\/@marioguzman\/113723581367302739\"><p>Have you noticed how some Apple apps just highlight w\/ a darker translucency rather than a solid color?<\/p><p>You can see this darker translucency row highlight in apps like Finder &amp; Apple Music sidebars.<\/p><p>Well, if you want to achieve this look for YOUR app, this is how you&rsquo;d do it:<\/p><p>Subclass <code>NSTableRowView<\/code> and override <code>isEmphasized<\/code> so that the getter returns <code>false<\/code>.<\/p><\/blockquote>\n\n<p><a href=\"https:\/\/mastodon.social\/@marioguzman\/113726297118733197\">Mario Guzm&aacute;n<\/a>:<\/p>\n<blockquote cite=\"https:\/\/mastodon.social\/@marioguzman\/113726297118733197\"><p>When designing your sidebars and toolbars, don&rsquo;t make the Sidebar toggle button a moving target. Don&rsquo;t make your users chase it back and forth to toggle it. Keep it left-aligned, &ldquo;pinned&rdquo; to the window control buttons.<\/p><p>See the video of Disk Utility vs Passwords apps from macOS. Passwords app is how you want to do it.<\/p><\/blockquote>\n\n<p>Safari and Calendar also work like Passwords, though Calendar doesn&rsquo;t use a standard toolbar. And why doesn&rsquo;t Contacts have such a button?<\/p>\n\n<p>It&rsquo;s definitely bad to make the user chase the button back and forth. On the other hand, for most apps, putting it to the left might give it undue prominence. I thought the convention used to be to pin it to the right. That kind of solved both problems but had the disadvantage of making the button maximally far away from the area that it applied to. And in a Big Sur world of toolbar items that don&rsquo;t fit, the implicit lowest priority from being the rightmost item would need to be boosted in order to avoid the instability of having it appear and disappear as the window resizes.<\/p>\n\n<p>Previously:<\/p>\n<ul>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2025\/01\/06\/25-years-of-the-dock-and-aqua\/\">25 Years of the Dock and Aqua<\/a><\/li>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2024\/11\/12\/john-geleynse-retires-from-apple\/\">John Geleynse Retires From Apple<\/a><\/li>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2019\/04\/18\/origins-of-the-apple-human-interface\/\">Origins of the Apple Human Interface<\/a><\/li>\n<li><a href=\"https:\/\/mjtsai.com\/blog\/2021\/10\/15\/old-apple-human-interface-guidelines\/\">Old Apple Human Interface Guidelines<\/a><\/li>\n<\/ul>\n\n<p id=\"mac-toolbar-guidelines-update-2025-01-24\">Update (2025-01-24): <a href=\"https:\/\/www.dribin.org\/dave\/blog\/archives\/2009\/12\/18\/bottom_bars_in_ib\/\">Dave Dribin<\/a> (2009):<\/p>\n<blockquote cite=\"https:\/\/www.dribin.org\/dave\/blog\/archives\/2009\/12\/18\/bottom_bars_in_ib\/\">\n<p>Bottom bars have been an important user interface element for a while now on Mac OS X.  They&rsquo;re that gray status bar you see at the bottom of many of Apple&rsquo;s applications including iTunes, Finder, iChat, iCal, Address Book, and iPhoto.  The Human Interface Guidelines even has a whole <a href=\"http:\/\/developer.apple.com\/mac\/library\/documentation\/UserExperience\/Conceptual\/AppleHIGuidelines\/XHIGWindows\/XHIGWindows.html#\/\/apple_ref\/doc\/uid\/20000961-SW6\">section on bottom bars<\/a> [Apple broke the link] describing what they are and when to use them.<\/p>\n<p>[&#8230;]<\/p>\n<p>In Mac OS X 10.5, Apple added a new API to <code>NSWindow<\/code> to add bottom bars, somewhat cryptically named <a href=\"http:\/\/developer.apple.com\/mac\/library\/documentation\/Cocoa\/Reference\/ApplicationKit\/Classes\/NSWindow_Class\/Reference\/Reference.html#\/\/apple_ref\/occ\/instm\/NSWindow\/setContentBorderThickness:forEdge:\"><code>setContentBorderThickness:forEdge:<\/code><\/a>.<\/p>\n<\/blockquote>\n\n<p>Via <a href=\"https:\/\/mastodon.social\/@marioguzman\/113844481541081582\">Mario Guzm&aacute;n<\/a>:<\/p>\n<blockquote cite=\"https:\/\/mastodon.social\/@marioguzman\/113844481541081582\">\n<p>Given how overloaded NSToolbars became with macOS Big Sur, Bottom Bars are needed now more than ever.<\/p>\n<\/blockquote>","protected":false},"excerpt":{"rendered":"<p>Mario Guzm&aacute;n (Mastodon, Bluesky): The following sections are general guidelines that describe fundamental Toolbar layout and design principles for Mac applications. Following these guidelines will help you create functional and aesthetically pleasing toolbars that are easy for Mac users to understand and use.This document will reference a hypothetical Email application to illustrate key points in [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"apple_news_api_created_at":"2025-01-13T20:12:58Z","apple_news_api_id":"707bdefd-edfa-4504-b5df-893ee3f04481","apple_news_api_modified_at":"2025-01-24T14:33:03Z","apple_news_api_revision":"AAAAAAAAAAAAAAAAAAAAAQ==","apple_news_api_share_url":"https:\/\/apple.news\/AcHve_e36RQS134k-4_BEgQ","apple_news_coverimage":0,"apple_news_coverimage_caption":"","apple_news_is_hidden":false,"apple_news_is_paid":false,"apple_news_is_preview":false,"apple_news_is_sponsored":false,"apple_news_maturity_rating":"","apple_news_metadata":"\"\"","apple_news_pullquote":"","apple_news_pullquote_position":"","apple_news_slug":"","apple_news_sections":"\"\"","apple_news_suppress_video_url":false,"apple_news_use_image_component":false,"footnotes":""},"categories":[2],"tags":[2165,193,69,176,77,538,30,2598,71,103],"class_list":["post-46419","post","type-post","status-publish","format-standard","hentry","category-technology","tag-apple-password-manager","tag-calendar","tag-cocoa","tag-contacts","tag-design","tag-diskutility","tag-mac","tag-macos-15-sequoia","tag-programming","tag-safari"],"apple_news_notices":[],"_links":{"self":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/46419","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/comments?post=46419"}],"version-history":[{"count":3,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/46419\/revisions"}],"predecessor-version":[{"id":46518,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/posts\/46419\/revisions\/46518"}],"wp:attachment":[{"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/media?parent=46419"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/categories?post=46419"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mjtsai.com\/blog\/wp-json\/wp\/v2\/tags?post=46419"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}