Высота UIBARBUTTONITEM в ландшафте iPhone
-
30-09-2019 - |
Вопрос
У меня есть бар 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;
}
Затем вы можете настроить параметр настраивания кнопки стержней, когда вращается.
наконечник:
- В методе вращения, например
willAnimateRotationToInterfaceOrientation
, Распечатайте пользовательские рамки просмотра элементов кнопок навигации .. и получите правильный кадр (в режиме Protrait), которые вы хотите, также вы можете видеть, что кадр неверна в ландшафтном режиме, нам нужно это исправить. - Исправьте проблему кнопки ландшафта 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 кадра.