Bibi's DevLog ๐Ÿค“๐ŸŽ

[๐ŸŽ / UIKit] UINavigationController ๋ณธ๋ฌธ

๐Ÿ“ฑ๐ŸŽ iOS/๐Ÿ Apple Developer Documentation

[๐ŸŽ / UIKit] UINavigationController

๋น„๋น„ bibi 2022. 9. 23. 16:07

[UIKit] UINavigationController

Apple Developer Documentation

UINavigtaionController

ํด๋ž˜์Šค

๊ณ„์ธต์ ์ธ ๋‚ด์šฉ์„ ํƒ์ƒ‰ํ•˜๊ธฐ ์œ„ํ•œ ์Šคํƒ ๊ธฐ๋ฐ˜์˜ scheme์„ ์ •์˜ํ•œ ์ปจํ…Œ์ด๋„ˆ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ.

์„ ์–ธ

@MainActor class UINavigationController : UIViewController

๊ฐœ์š”

navigation controller๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ์ž์‹ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋“ค์„ ๋‚ด๋น„๊ฒŒ์ด์…˜ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๊ด€๋ฆฌํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ์ž…๋‹ˆ๋‹ค. ์ด ์œ ํ˜•์˜ ์ธํ„ฐํŽ˜์ด์Šค์—์„œ๋Š”, ํ•œ ๋ฒˆ์— ์˜ค์ง ํ•˜๋‚˜์˜ ์ž์‹ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋งŒ ๋ณด์ด๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ์š”์†Œ๋ฅผ ์„ ํƒํ•˜๋ฉด ์ƒˆ๋กœ์šด ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์‚ฌ์šฉํ•ด ์Šคํฌ๋ฆฐ์— ๋“ค์–ด์˜ค๋ฉฐ(push), ์ด์ „์˜ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์ˆจ๊ฒจ์ง‘๋‹ˆ๋‹ค. ์ธํ„ฐํŽ˜์ด์Šค ๋งจ ์œ„์˜ ๋‚ด๋น„๊ฒŒ์ด์…˜ ๋ฐ”์— ์žˆ๋Š” ๋’ค๋กœ ๊ฐ€๊ธฐ ๋ฒ„ํŠผ(back button)์„ ๋ˆ„๋ฅด๋ฉด ๋งจ ์œ„์˜ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ(top view controller)๊ฐ€ ์ œ๊ฑฐ๋˜๋ฉฐ, ๊ทธ๋กœ ์ธํ•ด ์•„๋ž˜์˜ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋“œ๋Ÿฌ๋‚ฉ๋‹ˆ๋‹ค.

๋‹น์‹ ์˜ ์•ฑ์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๋Š” ๊ณ„์ธต์  ๋ฐ์ดํ„ฐ์˜ ๊ตฌ์กฐ๋ฅผ ํ‰๋‚ด๋‚ด๊ธฐ ์œ„ํ•ด ๋‚ด๋น„๊ฒŒ์ด์…˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. ๊ณ„์ธต์˜ ๊ฐ ์ˆ˜์ค€์—์„œ, ๊ทธ ์ˆ˜์ค€์— ๋Œ€ํ•œ ์ปจํ…์ธ ๋ฅผ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด (์ปค์Šคํ…€ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๋Š”) ์ ์ ˆํ•œ ํ™”๋ฉด์„ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆผ1์€ iOS ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์— ์žˆ๋Š” '์„ค์ •' ์•ฑ์˜ ๋„ค๋น„๊ฒŒ์ด์…˜ ์ธํ„ฐํŽ˜์ด์Šค์˜ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ํ™”๋ฉด์€ ํ™˜๊ฒฝ ์„ค์ •์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ์•ฑ์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์•ฑ์„ ์„ ํƒํ•˜๋ฉด ๊ทธ ์•ฑ์— ๋Œ€ํ•œ ๊ฐœ๋ณ„์ ์ธ ์„ค์ •๊ณผ ๊ทธ๋ฃน ์„ค์ •์ด ๋“œ๋Ÿฌ๋‚ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฃน์„ ์„ ํƒํ•˜๋ฉด ๋” ๋งŽ์€ ์„ค์ •๋“ค์ด ๋‚˜ํƒ€๋‚˜๋ฉฐ ์ด๋Ÿฐ ์‹์œผ๋กœ ๋ฐ˜๋ณต๋ฉ๋‹ˆ๋‹ค. root view๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ๋ทฐ์— ๋Œ€ํ•ด์„œ๋Š”, ์‚ฌ์šฉ์ž๊ฐ€ ์ƒ์œ„์˜ ๊ณ„์ธต์œผ๋กœ ๋˜๋Œ์•„๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก navigation controller๊ฐ€ back ๋ฒ„ํŠผ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆผ1 : ๋‚ด๋น„๊ฒŒ์ด์…˜ ์ธํ„ฐํŽ˜์ด์Šค์˜ ์˜ˆ์‹œ

https://docs-assets.developer.apple.com/published/83ef757907/navigation_interface_2x_8f059f7f-2e2f-4c86-8468-7402b7b3cfe0.png

navigation controller ๊ฐ์ฒด๋Š” navigation stack์ด๋ผ๊ณ  ์•Œ๋ ค์ง„, ์ˆœ์„œ๊ฐ€ ์žˆ๋Š” ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•ด ๊ทธ๊ฒƒ์˜ ์ž์‹ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋“ค์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ root view controller์ด๋ฉฐ, stack์˜ ๋ฐ”๋‹ฅ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋Š” stack์˜ ์ตœ์ƒ์œ„ ์š”์†Œ์ด๋ฉฐ, ํ˜„์žฌ ๋ณด์—ฌ์ง€๊ณ  ์žˆ๋Š” ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. segue๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ UINavigationController ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋“ค์„ stack์— ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ๋˜ํ•œ ๋‚ด๋น„๊ฒŒ์ด์…˜ ๋ฐ”์˜ back ๋ฒ„ํŠผ์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, left-edge ์Šค์™€์ดํ”„ ์ œ์Šค์ฒ˜๋ฅผ ์‚ฌ์šฉํ•ด ์ตœ์ƒ์œ„ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

navigation controller๋Š” ์ธํ„ฐํŽ˜์ด์Šค ์ƒ๋‹จ์˜ navigation bar์™€ ์ธํ„ฐํŽ˜์ด์Šค ํ•˜๋‹จ์˜ ์„ ํƒ์ ์ธ toolbar๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. navigation bar๋Š” ํ•ญ์ƒ ๋ณด์—ฌ์ง€๋ฉฐ navigation controller์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๋ฉฐ, navigation controller๋Š” ์ž์‹ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋กœ๋ถ€ํ„ฐ ์ œ๊ณต๋˜๋Š” ์ปจํ…์ธ ๋กœ navigation bar๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค. ๋น„์Šทํ•˜๊ฒŒ, isToolBarHidden ํ”„๋กœํผํ‹ฐ๊ฐ€ false์ด๋ฉด, navigation controller๋Š” ์ตœ์ƒ์œ„ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์ปจํ…์ธ ๋กœ toolbar๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

navigation controller๋Š” ์ž์‹ ์˜ ๋™์ž‘์„ delegate ๊ฐ์ฒด๋กœ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค. delegate๊ฐ์ฒด๋Š” ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋“ค์˜ push ๋˜๋Š” pop์„ overrideํ•˜๊ฑฐ๋‚˜, ์ปค์Šคํ…€ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ „ํ™˜์„ ์ œ๊ณตํ•˜๊ฑฐ๋‚˜, ๋‚ด๋น„๊ฒŒ์ด์…˜ ์ธํ„ฐํŽ˜์ด์Šค์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ๋ฐฉํ–ฅ์„ ๋ช…์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์ด ์ œ๊ณตํ•˜๋Š” delegate ๊ฐ์ฒด๋Š” ๋ฐ˜๋“œ์‹œ UINavigationControllerDelegate ํ”„๋กœํ† ์ฝœ์„ ๋”ฐ๋ผ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆผ2๋Š” navigation controller์™€ ๊ทธ๊ฒƒ์ด ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ์ฒด๋“ค์˜ ๊ด€๊ณ„๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์ด ๊ฐ์ฒด๋“ค์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” navigation controller์˜ ๋ช…์‹œ๋œ ํ”„๋กœํผํ‹ฐ๋“ค์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

๊ทธ๋ฆผ2 : navigation controller์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๋Š” ๊ฐ์ฒด๋“ค

https://docs-assets.developer.apple.com/published/83ef757907/nav_controllers_objects_a8447aef-d652-4ab9-85d1-1eb8e4876e12.jpg

 

 

 

Navigation Controller ๋ทฐ

navigation controller๋Š” ์ปจํ…Œ์ด๋„ˆ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ์ž…๋‹ˆ๋‹ค - ์ด ๋ง์€, ์ž์‹  ๋‚ด๋ถ€์— ๋‹ค๋ฅธ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋“ค์˜ ์ปจํ…์ธ ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๋ง์ž…๋‹ˆ๋‹ค. navigation controller์˜ ๋ทฐ์—๋Š” view ํ”„๋กœํผํ‹ฐ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ทฐ๋Š” navigation bar, ์„ ํƒ์ ์ธ toolbar, ๊ทธ๋ฆฌ๊ณ  ์ตœ์ƒ์œ„ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ์— ์ƒ์‘ํ•˜๋Š” content view๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆผ3์€ ์ด ๋ทฐ๋“ค์ด ์ „์ฒด์ ์ธ ๋‚ด๋น„๊ฒŒ์ด์…˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด ์–ด๋–ป๊ฒŒ ์กฐ๋ฆฝ๋˜๋Š”์ง€๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. (์ด ๊ทธ๋ฆผ์—์„œ, ๋‚ด๋น„๊ฒŒ์ด์…˜ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ํƒญ ๋ฐ” ์ธํ„ฐํŽ˜์ด์Šค ๋‚ด๋ถ€์— ์ถ”๊ฐ€๋กœ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.) navigation bar์˜ ์ปจํ…์ธ ์™€ toolbar์˜ ๋ทฐ๊ฐ€ ๋ฐ”๋€Œ๋”๋ผ๋„, ๋ทฐ ์ž์ฒด๋Š” ๋ฐ”๋€Œ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ๋ฐ”๋€Œ๋Š” ๋ทฐ๋Š”, navigation stack์˜ ์ตœ์ƒ์œ„ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์ปค์Šคํ…€ ์ปจํ…์ธ  ๋ทฐ ๋ฟ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ฆผ3 : navigation controller์˜ ๋ทฐ๋“ค

https://docs-assets.developer.apple.com/published/83ef757907/NavigationViews_2x_e69e98a2-aaac-477e-9e33-92e633e29cc7.png

๋…ธํŠธ
iOS7 ์ดํ›„ ๋ฒ„์ „๋ถ€ํ„ฐ, ์ปจํ…์ธ  ๋ทฐ๋Š” ๋‚ด๋น„๊ฒŒ์ด์…˜ ๋ฐ” ์•„๋ž˜์— ๊ฒน์ณ์ง‘๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ ์ปจํ…์ธ ๋ฅผ ๋””์ž์ธํ•  ๋•Œ ๊ฒน์ณ์ง€๋Š” ๊ณต๊ฐ„์„ ๋ฐ˜๋“œ์‹œ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๋น„๊ฒŒ์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ๋Š” navigation bar์™€ ์„ ํƒ์ ์ธ ๋‚ด๋น„๊ฒŒ์ด์…˜ ํˆด๋ฐ”์˜ ์ƒ์„ฑ, ๊ตฌ์„ฑ, ํ‘œ์‹œ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. navigation bar์˜ ์™ธํ˜•๊ณผ ์—ฐ๊ด€๋œ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ปค์Šคํ…€ํ•˜๋Š” ๊ฒƒ์€ ํ—ˆ์šฉ๋˜๋‚˜, ์ ˆ๋Œ€๋กœ navigation bar์˜ frame, bounds, alpha๊ฐ’์„ ์ง์ ‘์ ์œผ๋กœ ๋ฐ”๊ฟ”์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ UINavigationBar๋ฅผ ์ƒ์†ํ•œ๋ฉด, init(navigationBarClass:toolbarClass:) ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐ˜๋“œ์‹œ ๋‚ด๋น„๊ฒŒ์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ดˆ๊ธฐํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. navigation bar๋ฅผ ์ˆจ๊ธฐ๊ฑฐ๋‚˜ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด์„œ๋Š”, isNavigationBarHidden ํ”„๋กœํผํ‹ฐ๋‚˜ setNavigationBarHidden(_:animated:) ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

๋‚ด๋น„๊ฒŒ์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๋‚ด๋น„๊ฒŒ์ด์…˜ ์Šคํƒ์— ์žˆ๋Š” ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ์™€ ์—ฐ๊ด€๋œ navigation item ๊ฐ์ฒด(์ฆ‰, UINavigationItem ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋“ค)๋ฅผ ์‚ฌ์šฉํ•ด navigation bar์˜ ๋‚ด์šฉ์„ ๋™์ ์œผ๋กœ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค. navigation bar์˜ ์ „์ฒด์ ์ธ ์™ธํ˜•์„ ์ปค์Šคํ…€ํ•˜๋ ค๋ฉด, UIAppearance API๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. navigation bar์˜ ๋‚ด์šฉ์„ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด, ์ปค์Šคํ…€ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ์˜ navigation item์„ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

navigation bar์— ๋Œ€ํ•œ ๋” ๋งŽ์€ ์ •๋ณด๋ฅผ ๋ณด๋ ค๋ฉด UINavigationBar๋ฅผ ์ฐธ๊ณ ํ•˜์‹ญ์‹œ์˜ค. bar button item์„ ์–ด๋–ป๊ฒŒ ๋งŒ๋“œ๋Š”์ง€์— ๋Œ€ํ•œ ๋” ๋งŽ์€ ์ •๋ณด๋ฅผ ๋ณด๋ ค๋ฉด UINavigationItem์„ ์ฐธ๊ณ ํ•˜์‹ญ์‹œ์˜ค.

Navigation Bar ์—…๋ฐ์ดํŠธํ•˜๊ธฐ

์ตœ์ƒ์œ„ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋ฐ”๋€” ๋•Œ๋งˆ๋‹ค, ๋‚ด๋น„๊ฒŒ์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๊ทธ์— ๋”ฐ๋ผ navigation bar๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ์ฒด์ ์œผ๋กœ๋Š”, ๋‚ด๋น„๊ฒŒ์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ๋Š” navigation bar์˜ ์„ธ ์˜์—ญ: ์™ผ์ชฝ, ์ค‘์•™, ์˜ค๋ฅธ์ชฝ ๊ฐ๊ฐ์— ํ‘œ์‹œ๋˜๋Š” bar button items๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค. bar button item์€ UIBarButtonItemํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์ž…๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ํ•„์š”์— ๋”ฐ๋ผ ์ปค์Šคํ…€ ์ปจํ…์ธ ๋กœ item์„ ๋งŒ๋“ค๊ฑฐ๋‚˜, ํ‘œ์ค€ ์‹œ์Šคํ…œ ์•„์ดํ…œ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

navigation bar์˜ ์ƒ‰์„ ์ •ํ•˜๋Š” ๊ฒƒ์€ navigation bar ์ž์‹ ์˜ ํ”„๋กœํผํ‹ฐ์— ์˜ํ•ด ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค. navigation bar์˜ item์˜ ์ƒ‰์„ ๋ฐ”๊พธ๊ธฐ ์œ„ํ•ด์„œ๋Š” tintColor ํ”„๋กœํผํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , navigation bar ์ž์ฒด์˜ ์ƒ‰์„ ๋ฐ”๊พธ๊ธฐ ์œ„ํ•ด์„œ๋Š” barTintColor ํ”„๋กœํผํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. navigation bar๋Š” ํ˜„์žฌ ๋ณด์—ฌ์ง€๊ณ  ์žˆ๋Š” ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋กœ๋ถ€ํ„ฐ ์ƒ‰์ƒ์„ ์ƒ์†ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

navigation bar์— ๋Œ€ํ•œ ๋” ๋งŽ์€ ์ •๋ณด๋ฅผ ์œ„ํ•ด์„œ๋Š” UINavigationBar๋ฅผ ์ฐธ๊ณ ํ•˜์‹ญ์‹œ์˜ค. bar button item์„ ์–ด๋–ป๊ฒŒ ๋งŒ๋“œ๋Š”์ง€์— ๋Œ€ํ•œ ๋” ๋งŽ์€ ์ •๋ณด๋ฅผ ๋ณด๋ ค๋ฉด UIBarButtonItem ์„ ์ฐธ๊ณ ํ•˜์‹ญ์‹œ์˜ค.

์™ผ์ชฝ item

๋‚ด๋น„๊ฒŒ์ด์…˜ ์Šคํƒ์—์„œ ๋ฃจํŠธ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋งŒ ์ œ์™ธํ•˜๊ณ , navigation bar์˜ ์™ผ์ชฝ item์€ ์ด์ „ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋กœ ๋˜๋Œ์•„๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค๋‹ˆ๋‹ค(๋’ค๋กœ ๊ฐ€๊ธฐ ๋ฒ„ํŠผ). ๋งจ ์™ผ์ชฝ์— ์œ„์น˜ํ•˜๋Š” ๋ฒ„ํŠผ(left-most button)์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค:

  • ์ตœ์ƒ์œ„ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ custom left bar button item์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด, ๊ทธ item์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. custom left bar button item๋ฅผ ์ง€์ •ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š”, ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ์˜ navigtaion item์œผ๋กœ leftBarButtonItem ํ”„๋กœํผํ‹ฐ๋ฅผ ์„ค์ •ํ•˜์‹ญ์‹œ์˜ค.
  • ์ตœ์ƒ์œ„ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ custom left bar button item์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์ง€๋งŒ, ์ด์ „ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ์˜ navigation item์— backBarButtonItem ํ”„๋กœํผํ‹ฐ๋กœ ์ง€์ •๋œ ๊ฐ์ฒด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด, navigation bar์— ๊ทธ item์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
  • ๋งŒ์•ฝ custom bar button์ด ์ตœ์ƒ์œ„ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ์™€ ์ด์ „ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ์— ๋ชจ๋‘ ์ง€์ •๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋ฉด, ๊ธฐ๋ณธ ๋’ค๋กœ๊ฐ€๊ธฐ ๋ฒ„ํŠผ์ด ์‚ฌ์šฉ๋˜๋ฉฐ, ๋’ค๋กœ๊ฐ€๊ธฐ ๋ฒ„ํŠผ์˜ title์€ ์ด์ „ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ์˜ titleํ”„๋กœํผํ‹ฐ์˜ ๊ฐ’์œผ๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค - ์Šคํƒ ์ƒ์—์„œ ํ•œ ์ธต ์•„๋ž˜์˜ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค. (๋งŒ์•ฝ ๋‚ด๋น„๊ฒŒ์ด์…˜ ์Šคํƒ์— ๋‹จ ํ•˜๋‚˜์˜ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋งŒ์ด ์กด์žฌํ•œ๋‹ค๋ฉด, ๋’ค๋กœ๊ฐ€๊ธฐ ๋ฒ„ํŠผ์ด ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.)

๋…ธํŠธ
๋’ค๋กœ ๊ฐ€๊ธฐ ๋ฒ„ํŠผ์˜ title์ด ๊ฐ€์šฉ์˜์—ญ์— ๋น„ํ•ด ๋„ˆ๋ฌด ๊ธด ๊ฒฝ์šฐ, navigation bar๊ฐ€ ์‹ค์ œ ๋ฒ„ํŠผ title ๋Œ€์‹  “Back”์ด๋ผ๋Š” ๋ฌธ์ž์—ด์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. navigation bar๋Š” ๋’ค๋กœ๊ฐ€๊ธฐ ๋ฒ„ํŠผ์ด ์ด์ „ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ์— ์˜ํ•ด ์ œ๊ณต๋  ๋•Œ๋งŒ ์ด๋ ‡๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์ƒˆ ์ตœ์ƒ์œ„ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ custom left bar button item(๊ทธ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ์˜ navigation item์— leftBarButtonItem ๋˜๋Š” leftBarButtonItems ํ”„๋กœํผํ‹ฐ๋กœ ์ง€์ •๋œ ๊ฐ์ฒด)์„ ๊ฐ–๋Š” ๊ฒฝ์šฐ, navigation bar๋Š” ๋ฒ„ํŠผ์˜ title์„ ๋ฐ”๊พธ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ค‘์•™ item

๋‚ด๋น„๊ฒŒ์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ๋Š” navigation bar์˜ ์ค‘์•™์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค:

  • ์ƒˆ ์ตœ์ƒ์œ„ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ custom title view๋ฅผ ๊ฐ–๋Š”๋‹ค๋ฉด, navigation bar๋Š” ๊ธฐ๋ณธ title view ์ž๋ฆฌ์— ๊ทธ ๋ทฐ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
  • custom title view๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋ฉด, navigation bar๋Š” ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ์˜ ๊ธฐ๋ณธ title๋ฅผ ๋‹ด์€ label์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ด label์˜ ๋ฌธ์ž์—ด์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ์˜ title ํ”„๋กœํผํ‹ฐ์— ํฌํ•จ๋œ ๊ฐ’์ด ๋ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ์˜ title์ด ์•„๋‹Œ ๋‹ค๋ฅธ title์„ ํ‘œ์‹œํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ์˜ navigation item์˜ title ํ”„๋กœํผํ‹ฐ๋ฅผ ๋Œ€์‹  ์„ค์ •ํ•˜์‹ญ์‹œ์˜ค.

์˜ค๋ฅธ์ชฝ item

๋‚ด๋น„๊ฒŒ์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ๋Š” navigation bar์˜ ์˜ค๋ฅธ์ชฝ ์˜์—ญ์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค:

  • ์ตœ์ƒ์œ„ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ custom right bar button item์„ ๊ฐ–๋Š”๋‹ค๋ฉด, ๊ทธ item์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. custom right bar button item์„ ์ง€์ •ํ•˜๋ ค๋ฉด, ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ์˜ navigation item์œผ๋กœ rightBarButtonItem ํ”„๋กœํผํ‹ฐ๋ฅผ ์„ค์ •ํ•˜์‹ญ์‹œ์˜ค.
  • custom right bar button item์ด ์ง€์ •๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋ฉด, navigation bar๋Š” bar์˜ ์˜ค๋ฅธ์ชฝ ์˜์—ญ์— ์•„๋ฌด๊ฒƒ๋„ ํ‘œ์‹œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Toolbar ํ‘œ์‹œํ•˜๊ธฐ

๋‚ด๋น„๊ฒŒ์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ ๊ฐ์ฒด๋Š” ์„ ํƒ์ ์ธ toolbar๋ฅผ ์ž์‹ ์˜ ๋ทฐ ๊ณ„์ธต ์†์—์„œ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ํ‘œ์‹œ๋  ๋–„, toolbar๋Š” ์œ ํšจํ•œ ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ์˜ toolbarItems ํ”„๋กœํผํ‹ฐ๋กœ๋ถ€ํ„ฐ ์ž์‹ ์˜ ํ˜„์žฌ ์š”์†Œ๋“ค์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ์œ ํšจํ•œ ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋ฐ”๋€Œ๋ฉด, ๋‚ด๋น„๊ฒŒ์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ๋Š” toolbar item๋“ค์„ ์ƒˆ๋กœ์šด ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ์— ๋งž๊ฒŒ ์ˆ˜์ •ํ•˜๋ฉฐ, ์ ์ ˆํ•œ ๊ฒฝ์šฐ์— ์ƒˆ ์š”์†Œ๋“ค์ด ๊ทธ ์œ„์น˜๋กœ ๋“ฑ์žฅํ•  ๋•Œ ์• ๋‹ˆ๋ฉ”์ด์…˜ ํšจ๊ณผ๋ฅผ ์ค๋‹ˆ๋‹ค.

๋‚ด๋น„๊ฒŒ์ด์…˜ toolbar๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ˆจ๊ฒจ์ ธ ์žˆ์œผ๋‚˜, ๋‚ด๋น„๊ฒŒ์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ ๊ฐ์ฒด์˜ setToolbarHidden(_:animated:) ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด ๋‚ด๋น„๊ฒŒ์ด์…˜ ์ธํ„ฐํŽ˜์ด์Šค์— toolbar๋ฅผ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ toolbar item์„ ์ง€์›ํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค๋ฉด, delegate ๊ฐ์ฒด๊ฐ€ ํ›„์† push ๋˜๋Š” pop ์—ฐ์‚ฐ์„ ํ•  ๋•Œ toolbar์˜ ํ‘œ์‹œ ์—ฌ๋ถ€๋ฅผ ์ „ํ™˜ํ•˜๋„๋ก ์ด ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. custom UIToolbar ํ•˜์œ„ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด, init(navigationBarClass:toolbarClass:) ๋ฅผ ์‚ฌ์šฉํ•ด ๋‚ด๋น„๊ฒŒ์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜์‹ญ์‹œ์˜ค. ๋งŒ์•ฝ custom tooolbar์™€ navigation bar์˜ ํ•˜์œ„ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•ด ๋‚ด๋น„๊ฒŒ์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋งŒ๋“ ๋‹ค๋ฉด, ๋‚ด๋น„๊ฒŒ์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํ™”๋ฉด์— ํ‘œ์‹œํ•˜๊ธฐ ์ „์— ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ pushํ•˜๊ณ  ์„ค์ •ํ•˜๋Š” ์ž‘์—…์„ ์ง์ ‘ ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๊ธฐ์–ตํ•˜์‹ญ์‹œ์˜ค.

๋‹ค๋ฅธ ํ™˜๊ฒฝ์— ์ ์šฉํ•˜๊ธฐ

๋‚ด๋น„๊ฒŒ์ด์…˜ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์••์ถ•๋œ ์ˆ˜ํ‰(horizontally compact)ํ™˜๊ฒฝ๊ณผ ์ผ๋ฐ˜์ ์ธ ์ˆ˜ํ‰(horizontally regular)ํ™˜๊ฒฝ ๋ชจ๋‘์— ๋™์ผํ•˜๊ฒŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋‘ ํ™˜๊ฒฝ์„ ์ „ํ™˜ํ•  ๋•Œ๋Š” ๋‚ด๋น„๊ฒŒ์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ์˜ ๋ทฐ์˜ ํฌ๊ธฐ๋งŒ์ด ๋ฐ”๋€๋‹ˆ๋‹ค. ๋‚ด๋น„๊ฒŒ์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋ทฐ ๊ณ„์ธต์ด๋‚˜ ๋ทฐ์˜ ๋ ˆ์ด์•„์›ƒ์„ ๋ฐ”๊พธ์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

๋‚ด๋น„๊ฒŒ์ด์…˜ ์Šคํƒ์˜ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋“ค ์‚ฌ์ด์˜ segue๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ, ์ผ๋ฐ˜์ ์ธ Show segue์™€ Show Detail segue๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค:

  • Show segue
    • ๋‚ด๋น„๊ฒŒ์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์ž์‹ ์˜ ๋‚ด๋น„๊ฒŒ์ด์…˜ ์Šคํƒ์— ์ง€์ •๋œ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ pushํ•ฉ๋‹ˆ๋‹ค.
  • Show Detail segue
    • ๋‚ด๋น„๊ฒŒ์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์ง€์ •๋œ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ modal๋กœ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ํƒ€์ž…์˜ segue๋“ค์˜ ๋™์ž‘์€ ๋ณ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ธํ„ฐํŽ˜์ด์Šค ๋™์ž‘

๋‚ด๋น„๊ฒŒ์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์ž์‹ ์˜ ์ธํ„ฐํŽ˜์ด์Šค์— ๋Œ€ํ•ด ์•„๋ž˜์™€ ๊ฐ™์€ ๋™์ž‘์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค:

  • ์ง€์›๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค ๋ฐฉํ–ฅ (supported interface orientations)
    • ๋‚ด๋น„๊ฒŒ์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ ๊ฐ์ฒด๋Š” ์ง€์›๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค ๋ฐฉํ–ฅ์„ ๊ฒฐ์ •ํ•  ๋•Œ ๋‚ด๋น„๊ฒŒ์ด์…˜ ์Šคํƒ์— ์žˆ๋Š” ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋“ค์„ ์ฐพ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์•„์ดํฐ์—์„œ, ๋‚ด๋น„๊ฒŒ์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๊ฑฐ๊พธ๋กœ ๋œ ์„ธ๋กœ ๋ฐฉํ–ฅ๋งŒ ๋นผ๊ณ  ๋ชจ๋“  ๋ฐฉํ–ฅ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์•„์ดํŒจ๋“œ์—์„œ, ๋‚ด๋น„๊ฒŒ์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๋ชจ๋“  ๋ฐฉํ–ฅ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๋‚ด๋น„๊ฒŒ์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ delegate๊ฐ์ฒด๊ฐ€ ์žˆ๋‹ค๋ฉด, ๊ทธ delegate์—์„œnavigationControllerSupportedInterfaceOrientations(_:) ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ์„œ๋กœ ๋‹ค๋ฅธ ์ง€์›๋˜๋Š” ๋ฐฉํ–ฅ์˜ ์ง‘ํ•ฉ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ‘œ์‹œ ๋ฌธ๋งฅ (presentation context)
    • ๋‚ด๋น„๊ฒŒ์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ๋Š” modal๋กœ ํ‘œ์‹œ๋˜๋Š” ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ์— ๋Œ€ํ•œ ํ‘œ์‹œ ๋ฌธ๋งฅ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. modal ์ „ํ™˜ ์Šคํƒ€์ผ์ด UIModalPresentationStyle.currentContext ์ด๊ฑฐ๋‚˜
      UIModalPresentationStyle.overCurrentContext ์ด๋ผ๋ฉด, ๋‚ด๋น„๊ฒŒ์ด์…˜ ์Šคํƒ์˜ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋ถ€ํ„ฐ์˜ modal ํ‘œ์‹œ๋Š” ์ „์ฒด ๋‚ด๋น„๊ฒŒ์ด์…˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ฎ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ƒํƒœ ๋ณด์กด

๋‚ด๋น„๊ฒŒ์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ์˜ restorationIdentifier ํ”„๋กœํผํ‹ฐ์— ๊ฐ’์„ ํ• ๋‹นํ•˜๋ฉด, ๊ทธ๊ฒƒ์€ ๋‚ด๋น„๊ฒŒ์ด์…˜ ์Šคํƒ์— ์žˆ๋Š” ์ž๊ธฐ ์ž์‹ ๊ณผ ์ž์‹ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋“ค์„ ๋ณด์กดํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๋น„๊ฒŒ์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์Šคํƒ์˜ ๋งจ ์•„๋ž˜์—์„œ ์‹œ์ž‘ํ•ด ์œ„์ชฝ์œผ๋กœ ์ด๋™ํ•˜๋ฉฐ, ์ด๋•Œ ์œ ํšจํ•œ ๋ณต์› ์‹๋ณ„์ž ๋ฌธ์ž์—ด์„ ๊ฐ€์ง„ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ ๊ฐ๊ฐ์„ ์ธ์ฝ”๋”ฉํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ์‹คํ–‰ ์‚ฌ์ดํด ๋™์•ˆ, ๋‚ด๋น„๊ฒŒ์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๋ณด์กด๋œ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋“ค์„ ๋ณด์กด๋œ ์ˆœ์„œ์™€ ๊ฐ™์€ ์ˆœ์„œ๋กœ ๋‚ด๋น„๊ฒŒ์ด์…˜ ์Šคํƒ์— ๋ณต์›ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๋น„๊ฒŒ์ด์…˜ ์Šคํƒ์— pushํ•œ ์ž์‹ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋“ค์€ ๊ฐ™์€ ๋ณต์› ์‹๋ณ„์ž๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๋น„๊ฒŒ์ด์…˜ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์ž๋™์œผ๋กœ ์ถ”๊ฐ€์ ์ธ ์ •๋ณด๋ฅผ ์ €์žฅํ•ด, ๊ฐ ์ž์‹ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋“ค์˜ ๋ณต์› ๊ฒฝ๋กœ๊ฐ€ ์œ ์ผํ•˜๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

์ƒํƒœ ๋ณด์กด๊ณผ ๋ณต์›์ด ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์ •๋ณด๋ฅผ ์œ„ํ•ด์„œ๋Š”, Preserving your app’s UI across launches ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.