UIBarButtonItem:setBackgroundVerticalPositionAdjustment не работает должным образом с пользовательской кнопкой

У меня есть следующий код для настройки отображения UIBarButtonItem (locationButton):

    UIButton *locationButtonAux = [UIButton buttonWithType:UIButtonTypeCustom];
    [locationButtonAux setFrame:CGRectMake(0, 0, LOCATION_BUTTON_WIDTH, LOCATION_BUTTON_HEIGHT)];
    [locationButtonAux setBackgroundImage:[UIImage imageNamed:@"location_button.png"] forState:UIControlStateNormal];
    [locationButtonAux setBackgroundImage:[UIImage imageNamed:@"location_button.png"] forState:UIControlStateHighlighted];
    [locationButtonAux addTarget:self action:@selector(userLocation) forControlEvents:UIControlEventTouchUpInside];
    UIBarButtonItem *locationButton = [[UIBarButtonItem alloc] initWithCustomView:locationButtonAux];
    UIBarButtonItem * item = [[UIBarButtonItem alloc] initWithTitle:@"title"
                                                              style:UIBarButtonItemStyleDone
                                                             target:nil action:@selector(someMssage)];
    [locationButton setBackgroundVerticalPositionAdjustment:-20.0 forBarMetrics:UIBarMetricsDefault];
    self.navigationItem.rightBarButtonItem = locationButton;

И я хочу отрегулировать положение этой кнопки в панели навигации, потому что моя панель навигации выше, чем обычно (настраивается с помощью внешнего вида).

Для этого я использую метод setBackgroundVerticalPositionAdjustment, как вы можете видеть в коде. Но с моим UIBarButtonItem он вообще не работает, независимо от того, какое смещение я там поместил, кнопка всегда отображается близко к нижней части панели (снимок). НО, если я использую обычный UIBarButtonItem с нормальным стилем (тот, который я назвал кнопкой), я действительно могу видеть, как положение кнопки будет изменено со смещением -20. Очень странно... Есть идеи?

Спасибо!

2 ответа

Решение

Возможно, что-то вроде этого будет работать для вас:

UIView *rightView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 150, 30)]; //change this frame to counteract for your taller navbar
[rightView addSubview:locationButtonAux];
UIBarButtonItem *rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:rightView];
self.navigationItem.rightBarButtonItem = rightBarButtonItem;

Надеюсь это поможет

Вы должны поместить кнопку в пустое представление и расположить ее в этом пустом представлении. Теперь сделайте так, чтобы пользовательский вид элемента панели кнопок был виден.

Вам действительно не нужна кнопка здесь, так как это просто изображение, и вы не используете ни одну из возможностей кнопки (вы можете прикрепить распознаватель жестов, чтобы определить нажатие). Итак, вот простое решение с использованием представления изображения:

UIImageView *locationButtonAux = 
    [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"location_button.png"]];
UIView* v = [[UIView alloc] initWithFrame:locationButtonAux.frame];
[v addSubview:locationButtonAux];
CGRect f = locationButtonAux.frame;
f.origin.y -= 10;
locationButtonAux.frame = f;
UIBarButtonItem *locationButton = [[UIBarButtonItem alloc] initWithCustomView:v];
self.navigationItem.rightBarButtonItem = locationButton;

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

Другие вопросы по тегам