iOS 5 SDK 에서 네비게이션 바 커스터마이징하기

November 05, 2011 | 1 Minute Read

iOS 4 이하 버전에서는 네비게이션 바의 디자인을 커스터마이징을 하려면 일종의 꼼수를 써야 했었죠. 특히 뒤로가기 버튼들을 바꾸려면 지나친 꼼수를 썼어야 했는데요. iOS 5 SDK 에서는 네비게이션 바 디자인을 커스터마이징 할 수 있는 UIAppearance Protocol 이라는 것이 추가 되었습니다.

다만, 이 방법을 사용하면 iOS 4 SDK 에서는 빌드가 안되고, 또 iOS 5 SDK 로 빌드하더라도 실행시 iOS 4 이하에서는 크래시가 일어나기 때문에 iOS 4 이하 버전에서는 작동하지 않도록 하는 코드를 추가 할 필요가 있습니다.

먼저 코드를 보시죠.

#ifdef __IPHONE_5_0 if ([[[UIDevice currentDevice] systemVersion] compare:@”5.0” options:NSNumericSearch] != NSOrderedAscending) { [[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@”navbar_background.png”] forBarMetrics:UIBarMetricsDefault];

    UIImage* barButtonImage = [[UIImage imageNamed:@"navbar_button_background.png"] stretchableImageWithLeftCapWidth:10.0 topCapHeight:0.0];
    [[UIBarButtonItem appearance] setBackgroundImage:barButtonImage
                                            forState:UIControlStateNormal
                                          barMetrics:UIBarMetricsDefault];

    UIImage* backButtonImage = [[UIImage imageNamed:@"navbar_backbutton_background.png"] stretchableImageWithLeftCapWidth:10.0 topCapHeight:0.0];
    [[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonImage
                                                      forState:UIControlStateNormal
                                                    barMetrics:UIBarMetricsDefault];
} #endif

아.. 징그럽네요..-_- 코드 에디터에 복사해 넣고 보시기 바랍니다. ㅎㅎ

내용은 간단합니다. 먼저, 아래의 부분은 iOS 5.0 SDK 에서만 빌드 되게 만드는 구문이구요.

#ifdef __IPHONE_5_0

그리고 아래의 부분이 중요한데요. iOS 5 SDK 의 UI 커스터마이징 기능을 iOS 5 에서만 작동 시키도록 합니다. 이 구문을 넣지 않으면 iOS 4.x 에서는 시작하자마자 튕기게 되니 잊지 말고 꼭 넣어주셔야 합니다.

if ([[[UIDevice currentDevice] systemVersion] compare:@”5.0” options:NSNumericSearch] != NSOrderedAscending) {

그리고 그 다음은 iOS 5 SDK 추가 된 UI 변경용 API 들을 사용해서 각종 배경 이미지등을 설정 해 주시면 됩니다.

네비게이션 바의 배경 이미지 변경 : [[UINavigationBar appearance] setBackgroundImage:

일반 버튼 배경 이미지 변경 : [[UIBarButtonItem appearance] setBackgroundImage:

뒤로 가기 버튼 배경 이미지 변경 : [[UIBarButtonItem appearance] setBackButtonBackgroundImage:

다행히 iOS 4 에서 커스터마이징 하셨던 것은 iOS 5 에서는 무시되므로 해당 코드를 변경하거나 수정하실 필요는 없습니다만, iOS 5 SDK 로 프로젝트를 시작하시는 거라면 iOS 4 호환을 위해 UIToolBar 와 UINavigationBar 등을 한 번 더 커스터마이징 해 주실 필요가 있습니다. (참고 링크 - Stack Overflow)

더 자세한 내용은 애플 공식 UIAppearance Protocol 문서를 참고하세요.