Размещение пользовательского представления UIBarButtonItem на панели навигации без стандартного горизонтального дополнения
Как удалить горизонтальное дополнение слева и справа от пользовательских элементов левой и правой UINavigationBar? Кажется, есть ~ 10 точек заполнения, которые по умолчанию устанавливают iOS.
Я настраиваю кнопки навигации влево и вправо (я отказался от попытки установить свой собственный backButtonItem, поэтому я просто использую leftBarButtonItem).
В любом случае (влево или вправо) нажатие этих пользовательских кнопок указывает на то, что Apple, похоже, сохраняет некоторые дополнения слева от элемента leftBarButtonItem и справа от rightBarButtonItem; независимо от того, насколько широка я делаю пользовательские свойства фона и изображения UIButton я в области левой/правой панели в качестве пользовательского представления.
Так как у UIBarButtonItems нет "фрейма", к которому я могу получить доступ, я не могу позиционировать их в своем супервизоре, как я могу нормальные UIViews.
Любые предложения по удалению этого дополнения по умолчанию? См. Скриншот, прикрепленный, чтобы увидеть бит, который я пытаюсь уменьшить до нулевой ширины. На снимке экрана значок плюса смещается вправо, потому что я дал ему вставку; но выделенное фоновое изображение, также предположительно использующее эту вставку, сжимается с правой стороны).
Смотрите изображение по адресу: https://skitch.com/starbaseweb/rj2e5/ios-simulator
Для справки, здесь, как я создаю свой пользовательский UIBarButtonItem (в данном случае это правая кнопка):
- (UIBarButtonItem *)customAddButtonItemWithTarget:(id)target action:(SEL)action {
UIButton *customButtonView = [UIButton buttonWithType:UIButtonTypeCustom];
customButtonView.frame = CGRectMake(0.0f, 0.0f, 45.0f, 44.0f);
[customButtonView setBackgroundImage:
[UIImage imageNamed:@"bgNavBarButton-OutsideRight-Normal.png"]
forState:UIControlStateNormal];
[customButtonView setBackgroundImage:
[UIImage imageNamed:@"bgNavBarButton-OutsideRight-Highlighted.png"]
forState:UIControlStateHighlighted];
[customButtonView setImage:
[UIImage imageNamed:@"bgNavBarButton-Add-Normal.png"]
forState:UIControlStateNormal];
[customButtonView setImage:
[UIImage imageNamed:@"bgNavBarButton-Add-Highlighted.png"]
forState:UIControlStateHighlighted];
[customButtonView addTarget:target action:action
forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *customButtonItem = [[[UIBarButtonItem alloc]
initWithCustomView:customButtonView] autorelease];
[customButtonView setImageEdgeInsets:UIEdgeInsetsMake(0.0f, 10.0f, 0.0f, 0.0f)];
//customButtonItem.imageInsets = UIEdgeInsetsMake(0.0f, 10.0f, 0.0f, 0.0f);
return customButtonItem;
}
Ответы
Ответ 1
Как уже отмечалось выше, решение, с которым я пошел, основано на этом ответе на другой, но очень близкий вопрос: Как настроить UIToolBar влево и вправо. Этому также способствует (и зависит от) iOS5, который позволяет вам устанавливать несколько кнопок слева или справа, а не только один.
Здесь приведен пример удаления прокладки слева от пользовательского элемента левой кнопки:
UIBarButtonItem *backButtonItem // Assume this exists, filled with our custom view
// Create a negative spacer to go to the left of our custom back button,
// and pull it right to the edge:
UIBarButtonItem *negativeSpacer = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace
target:nil action:nil];
negativeSpacer.width = -5;
// Note: We use 5 above b/c that how many pixels of padding iOS seems to add
// Add the two buttons together on the left:
self.navigationItem.leftBarButtonItems = [NSArray
arrayWithObjects:negativeSpacer, backButtonItem, nil];
И с этим, левое дополнение для элемента левой кнопки на панели навигации исчезло!
ПРИМЕЧАНИЕ. Это работало для меня в iOS5 и iOS6. Учитывая, что iOS7 значительно отличается (от публичных демонстраций), те из вас, у кого есть ранние семена iOS7, должны проверить, действительно ли что-то настолько непреднамеренное, как этот хак, действительно будет работать для вас за пределами iOS6.
Ответ 2
Я пробовал это, и он работает:
1) Создайте пользовательский подкласс UIToolbar, который ничего не делает в -drawRect:, и не является непрозрачным, и имеет backgroundColor = [UIColor clearColor].
2) Создайте пользовательский UIBarButtonItem с помощью панели инструментов в качестве пользовательского представления.
3) Добавьте свои кнопки в пользовательскую панель инструментов.
4) В вашей настраиваемой панели инструментов переопределите -layoutSubviews и сделайте свой собственный интервал.