Подтвердить что ты не робот

Размещение пользовательского представления 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;    
}
4b9b3361

Ответ 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 и сделайте свой собственный интервал.