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;
Я пропустил часть распознавания жестов, но вы можете легко увидеть, как добавить ее.