2

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

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

我有两个疑问:

  1. 这将停止按钮具有任何突出显示的状态,它们起作用但没有明显地被按下。无论如何围绕这个?

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

4

2 回答 2

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];
于 2012-07-23T10:42:17.507 回答
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];
于 2012-07-23T00:46:01.027 回答