Вопрос по iphone, uibarbuttonitem, uitoolbar, objective-c, uinavigationbar – UIBarButtonItem Offset?

2

Я пытаюсь сместить UIBarButtonItems в моем приложении, мне нужно, чтобы они были слегка смещены из-за изображения, которое я использую для своей панели навигации, чтобы все выстраивалось правильно. Мне удалось сделать это так:

[[UINavigationBar appearance] setTitleVerticalPositionAdjustment:-3 forBarMetrics:UIBarMetricsDefault];
    [[UIBarButtonItem appearance] setBackgroundVerticalPositionAdjustment:-3 forBarMetrics:UIBarMetricsDefault];
    [[UIBarButtonItem appearance] setBackButtonBackgroundVerticalPositionAdjustment:-3 forBarMetrics:UIBarMetricsDefault];

У меня есть два вопроса, хотя.

This stops the buttons have any highlighted state, they function but are no linger visibly pressed down. Anyway around this?

More importantly, this works well pushing my buttons upwards in my nav bar, but it pushes them up in my toolbars as well at the bottom of the screen where I need the opposite, actually push them down a little. How can I handle this?

Любая помощь всегда ценится, спасибо.

Будет намного легче понять, если вы можете опубликовать изображение, что вы хотите. Спасибо :) SALMAN

Ваш Ответ

2   ответа
3

// get the handle of your tabBar (probably self.tabBarController.tabBar
for (UIView *item in tabBar.items) {
    item.frame = CGRectOffset(item.frame, 0.0, -3.0);
}

Менее навязчивый метод регулировки положения по горизонтали заключается в использовании фиксированного и гибкого пространства элемента кнопки панели:

// this will put three pixels between whatever items it sits between
UIBarButtonItem *fixed = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil]
fixed.width = 3.0;

Поместите их в ваш массив предметов. Итак, если вы хотите разделить два элемента на 3 пикселя, сделайте следующее:

tabBar.items = [NSArray arrayWithObjects:button1, fixed, button2, nil];
о, я вижу это сейчас. извиняюсь. будет редактировать.
Установка рамки для горизонтального толчка не работает для меня.
Извините, я думаю, что вы не поняли, возможно, я не достаточно ясно. Это не горизонтальный интервал, который является проблемой, но вертикальный. Кнопки обычно расположены по центру (вертикально) на панели навигации, но мне нужно немного сместить кнопки вверх, а на панелях инструментов - немного вниз. Josh Kahane
14

я нашел решение! Вы можете настроить эти атрибуты внешнего вида в зависимости от того, в каком виде находится ваш объект, используя следующее:

appearanceWhenContainedIn:

Вместо стандартного

appearance

Итак, я реализовал свои потребности следующим образом, настраивая вверх и вниз в зависимости от того, находится ли кнопка на панели навигации или панели инструментов:

[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] setBackgroundVerticalPositionAdjustment:-3 forBarMetrics:UIBarMetricsDefault];
    [[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] setBackButtonBackgroundVerticalPositionAdjustment:-3 forBarMetrics:UIBarMetricsDefault];

    [[UIBarButtonItem appearanceWhenContainedIn:[UIToolbar class], nil] setBackgroundVerticalPositionAdjustment:3 forBarMetrics:UIBarMetricsDefault];
    [[UIBarButtonItem appearanceWhenContainedIn:[UIToolbar class], nil] setBackButtonBackgroundVerticalPositionAdjustment:3 forBarMetrics:UIBarMetricsDefault];
Жаль, можно настроить только вертикальное пространство для панели навигации BackButton
только что видел это сейчас. рада, что ты получил это работает. Я уверен, что мои грубые манипуляции с кадрами тоже подойдут. большинство приложений, над которыми я работал, имеют одну панель вкладок в качестве главной навигации, поэтому общность внешнего вида просто приятна. но я никогда не замечал, что внешний видWhenContainedIn: метод раньше. спасибо за хороший совет! +1
Я тоже, супер полезно! Josh Kahane

Похожие вопросы