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

Jac*_*ers 5 uinavigationbar uikit uinavigationcontroller ios

我已经能够改变后退按钮图标的垂直位置而不是文本.

我在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];
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

gab*_*ler 4

您将 UINavigationBar 子类化为 MyNavigationBar,在layoutSubviews 中更改后退指示器位置。

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];
}
Run Code Online (Sandbox Code Playgroud)

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

[[UIBarButtonItem appearanceWhenContainedIn:[MyNavigationBar class], nil] setBackButtonTitlePositionAdjustment:UIOffsetMake(0, 8) forBarMetrics:UIBarMetricsDefault];
Run Code Online (Sandbox Code Playgroud)