UIBarButtonItem偏移量?

时间:2012-07-22 23:42:11

标签: iphone objective-c uinavigationbar uibarbuttonitem uitoolbar

我试图在我的应用程序中偏移UIBarButtonItems,我需要它们稍微偏移,因为我用于导航栏的图像所以它们都正确排列。我设法这样做了:

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

我有两个疑问。

  1. 这会停止按钮具有任何突出显示的状态,它们可以正常工作,但不会有明显的按下状态。不管怎么说呢?

  2. 更重要的是,这可以很好地在我的导航栏中向上推动我的按钮,但是它会将它们推到我的工具栏以及屏幕底部我需要相反的位置,实际上将它们向下推了一下。我该如何处理?

  3. 任何帮助总是很感激,谢谢。

2 个答案:

答案 0 :(得分: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];

答案 1 :(得分: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;

将这些放入您的items数组中。因此,如果您想将两个项目分开3px,请执行以下操作:

tabBar.items = [NSArray arrayWithObjects:button1, fixed, button2, nil];