更改UINavigationBar中后退按钮文本的垂直位置

时间:2014-10-25 21:11:36

标签: ios uinavigationcontroller uikit uinavigationbar

我已经能够更改后退按钮图标的垂直位置,但不能更改文本。

我在UINavigationBar中使用layoutSubviews方法:

- (void)layoutSubviews {
    [super layoutSubviews];
    BOOL fixed = NO;
    NSArray *classNamesToReposition = @[@"_UINavigationBarBackIndicatorView", @"UINavigationButton", @"UINavigationItemButtonView"];
    for (UIView *view in [self subviews]) {
        if ([classNamesToReposition containsObject:NSStringFromClass([view class])] && !fixed) {
            CGRect frame = [view frame];
            if ([NSStringFromClass([view class]) isEqualToString:@"_UINavigationBarBackIndicatorView"]) {
                frame.origin.y = 14.5;
            } else if ([NSStringFromClass([view class]) isEqualToString:@"UINavigationButton"]) {
                frame.origin.y = 9.0;
            } else if ([NSStringFromClass([view class]) isEqualToString:@"UINavigationItemButtonView"]) {
                frame.origin.y = 5.0;
            }
            [view setFrame:frame];
        }
    }
}

问题是我在UINavigationItemButtonView上进行的任何帧更改似乎都没有任何效果,也没有对我在其实际按钮文本的UILabel子视图上进行任何帧更改。当我记录视图时,框架似乎正在改变,但文本在我的视图中没有移动。我做错了什么?

1 个答案:

答案 0 :(得分:4)

您在layoutSubviews中继承了一个名为MyNavigationBar的UINavigationBar,更改了后方指示器的位置。

for (UIView *view in [self subviews]) {
    CGRect frame = [view frame];
    if ([NSStringFromClass([view class]) isEqualToString:@"_UINavigationBarBackIndicatorView"]) {
        frame.origin.y = 19.5; //default is 11.5, move down by 8. 
    }
    [view setFrame:frame];
}

你可以通过在applicationDidFinished中添加它来改变backBarItem的标题位置。

[[UIBarButtonItem appearanceWhenContainedIn:[MyNavigationBar class], nil] setBackButtonTitlePositionAdjustment:UIOffsetMake(0, 8) forBarMetrics:UIBarMetricsDefault];