2016-12-23 19 views
2

Как установить 2 разных (например, красный и зеленый) изображения для панели навигации для пейзажной и портретной ориентации на iPhone (6-6 с-7) плюс или iPad?iPhone plus и iPad UIBarMetrics (различные пейзажные/портретные изображения для навигационной панели)

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

Не работает для iPad или iPhone * plus, всегда используется redImage для обеих ориентаций. Но работает со всеми другими iPhone (и даже iPod, я думаю).

Кроме того, будет приятно читать что-то о различиях в метриках штрихов (и что-то еще) между iPhone и iPad/iPhone плюс, потому что это (фоновое изображение на навигационной панели) - это не только одно конкретное поведение (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. В обработчике необходимо обновить фоновое изображение:

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

Вы не можете использовать UIBarMetrics для этого, потому что ваша задача использует ориентацию интерфейса в качестве критерия, но UIBarMetrics базы на size classes. Поэтому вы не можете использовать внешний вид для достижения требуемого поведения.

Я рекомендую вам создать пользовательский подкласс UINavigationBar и реализовать эту логику внутри него.

 Смежные вопросы

  • Нет связанных вопросов^_^