2016-12-23 10 views
2

iPhone (6-6s-7) 플러스에서 가로 및 세로 방향의 탐색 모음 배경에 2 개의 다른 (예 : 빨간색과 녹색) 이미지를 설정하는 방법 또는 iPad?iPhone 플러스 및 iPad UIBarMetrics (탐색 모음의 다른 가로/세로 이미지)

[[UINavigationBar appearance] setBackgroundImage:redImage 
            forBarMetrics:UIBarMetricsDefault]; 
[[UINavigationBar appearance] setBackgroundImage:greenImage 
            forBarMetrics:UIBarMetricsCompact]; 

iPad 또는 iPhone * plus에서 작동하지 마십시오. 두 방향 모두에서 항상 redImage를 사용합니다. 그러나 다른 모든 iPhone (심지어 i iPod도 마찬가지입니다)과 작동합니다.

또한 iPhone과 iPad/iPhone 사이의 바 메트릭 (및 그 밖의 다른 것)의 차이점에 대해 읽어 보는 것도 좋을 것입니다. (nav bar background image)는 특정 동작을하는 것 (iPhone 플러스, iPad) 내가 깨달은 (다른 구분 인세 트의 테이블보기, 등등).

감사합니다.

+1

여기 https://developer.apple.com/reference/uikit/uitraitcollection에서 크기 클래스를 읽을 수 있습니다. 그리고 iPad는 두 가지 차원 모두에서 동일한 크기의 클래스를 가지고 있습니다. UIInterfaceOrientation을 사용하고 사용자 정의 _isIPad 메서드를 작성하여 다른 방향의 올바른 이미지를 선택해야합니다. –

+1

크기 클래스에 대한 사과 설명서를 살펴보십시오. https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/AutolayoutPG/Size-ClassSpecificLayout.html 도움이되기를 바랍니다. –

+0

감사합니다. 의견은 도움이됩니다. – SiavA

답변

1

보기 컨트롤러 클래스 (또는 상태 표시 줄을 제어 할 수있는 다른 클래스)를 UIApplicationDidChangeStatusBarOrientationNotification으로 구독 할 수 있습니다. 당신은이에 대한 UIBarMetrics을 사용할 수 없습니다

<...> 
if ([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortrait || 
      [UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortraitUpsideDown) 
    { 
     image = redImage; 
    } 
    else 
    { 
     image = greenImage; 
    } 
<...> 

당신의 작업을 기준으로 인터페이스 방향을 사용하지만 UIBarMetrics 기지 size classes에 있기 때문에, 상기 처리기, 당신은 당신의 배경 이미지를 업데이트해야합니다. 따라서 필요한 동작을 수행하기 위해 모양을 사용할 수 없습니다.

UINavigationBar의 사용자 지정 하위 클래스를 만들고이 논리를 내부에 구현하는 것이 좋습니다.