Вопрос

У меня есть бар NAV в приложении для iPhone с пользовательскими Uibarbuttonitems в нем:

UIBarButtonItem* homePersonButton = [[UIBarButtonItem alloc]
       initWithImage:[UIImage imageNamed:@"homePerson.png"]
               style:UIBarButtonItemStylePlain
              target:self action:@selector(showHomePerson)];

HomePerson.png - 20 х 18.

Он выглядит хорошо в портретном режиме, но в ландшафтном режиме изображение 20x18 на кнопке слишком высока, чтобы выглядеть красиво. Похоже, что iOS работает на их стандартных кнопках, чтобы уменьшить изображение по мере необходимости, когда он находится в более тонкой навигационной панели.

Какой лучший способ справиться с этим?

Другой пример, когда у меня есть пользовательская кнопка в заголовке Nav Bar. Мне нужно, чтобы сжиматься, когда приложение вращается.

Заранее спасибо за любые указатели, которые вы можете дать мне!

Это было полезно?

Решение

Размер панели инструментов и навигационного бара изображения 20 х 20, поэтому, когда вы предоставляете изображение, которое не соответствует тем размерам, вы оставляете до структуры для изменения изменения размера / масштабирования вашего изображения, который вызывает вашу проблему. Изменение размера / масштабирования вашего изображения до 20x20 и ваше изображение должно выглядеть правильно в портрете, так и в ландшафте.

Другие советы

Steipete упомянул об этом в комментариях, но я чувствую, что он должен быть ответом сейчас. Как в iOS 5, вы можете использовать Инициализатор UIBARBUTTONITEM.:

- initWithImage:landscapeImagePhone:style:target:action:

Просто установить landscapeImagePhone Изображение на меньшую версию изображения, которое вы хотите разместить в ландшафте.

После некоторого тестирования я заметил, что iPhone уменьшит навигационную панель и, следовательно, Uibarbuttonitems на панели навигации, но iPhone 6 Plus не. Отказ Кажется, что 6 плюс сохраняет навигационную панель на высоте 44Px, тогда как обычный iPhone сжимает его до 32 пикселей. Из-за этого 6 плюс также не использовать landscapeImagePhone в ландшафте.

Я проверил это, не просто используя меньшее изображение для размера для landscapeImagePhone, но совершенно другое изображение. Изображение никогда не меняется на 6 плюс.


Тем не менее, осознайте следующее в отношении iOS 9.2 на iPhone 6 Plus:

То Документация Apple для этого инициализатора говорится, что landscapeImagePhone является:

Изображение, которое будет использоваться для элемента в ландшафтных барах в uiuserInterfaceiDiomphone Idiom.

По состоянию на iOS 9.2, 6 плюс докладывается как UIUserInterfaceIdiomPhone В портрете, так и в ландшафте. Раньше, 6 плюс раньше UIUserInterfaceIdiomUnspecified. Отказ Я не совсем уверен, когда это было обновлено. Но, так как это сейчас UIUserInterfaceIdiomPhone, согласно документации, landscapeImagePhone следует подать заявку на 6 плюс.

Поэтому, возможно, это не полагается так много на UiuserInterFaceIdiom, так как он делает на высоте навигационного бара. Я не знаю наверняка. Обратите внимание, что это несоответствие может быть «фиксированным» в будущем и, следовательно, вызывает другое поведение.

У меня есть подобная проблема. Теперь я использую настраиваемый тип к кнопке. Например, вот мой каталог UIBARBUTTONITEM. Вы можете использовать его для создания пользовательской кнопки бара.

+ (UIBarButtonItem*)barItemWithImage:(UIImage*)image highlightedImage:(UIImage *)highlightedImage     target:(id)target action:(SEL)action{
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    [button setBackgroundImage: [image stretchableImageWithLeftCapWidth:7.0 topCapHeight:0.0] forState:UIControlStateNormal];
    button.frame= CGRectMake(0.0, 0.0, image.size.width, image.size.height);
    [button addTarget:target action:action forControlEvents:UIControlEventTouchUpInside];
    UIBarButtonItem *barItem = [[UIBarButtonItem alloc] initWithCustomView:button];

    return barItem;
}

Затем вы можете настроить параметр настраивания кнопки стержней, когда вращается.

наконечник:

  1. В методе вращения, напримерwillAnimateRotationToInterfaceOrientation, Распечатайте пользовательские рамки просмотра элементов кнопок навигации .. и получите правильный кадр (в режиме Protrait), которые вы хотите, также вы можете видеть, что кадр неверна в ландшафтном режиме, нам нужно это исправить.
  2. Исправьте проблему кнопки ландшафта BAR, ссылаясь на правильное значение кадра.

В моем случае я просто просто исправить происхождение пользовательского вида ... например,

// adjust the navigation Item top, otherwise it is not proper set after rotation
_centralRootViewController.navigationItem.leftBarButtonItem.customView.top = 5;
_centralRootViewController.navigationItem.rightBarButtonItem.customView.top = 5;

ПРИМЕЧАНИЕ: топ - Y кадра.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top