【问题标题】:Change vertical position of back button text in UINavigationBar更改 UINavigationBar 中后退按钮文本的垂直位置
【发布时间】:2014-10-25 21:11:35
【问题描述】:

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

我在 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 子视图(即实际按钮文本)所做的任何帧更改也没有。当我记录视图时,框架似乎正在改变,但文本在我的视图中没有移动。我做错了什么?

【问题讨论】:

  • 杰克,你有没有试过把代码放在viewDidAppear: 中?我在我的一个项目上进行了测试,它确实设置了 y 位置。

标签: ios uinavigationcontroller uikit uinavigationbar


【解决方案1】:

您将一个名为 MyNavigationBar 的 UINavigationBar 子类化,在 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];
}

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

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

【讨论】:

  • 那些代码块是互斥的吗?您可以单独使用 [UIBarButtonItem appearanceWhenContainedIn...] 设置位置,还是还需要遍历视图?
  • 不行,我要两个都加,第一个是改变后退指示符(后退箭头),第二个是改变backbarItem的标题,这里是example in如果你想看看它是如何工作的。
  • 这太棒了,但不幸的是,这会从后向箭头取消链接文本,从而使 self.navigationItem.hidesBackButton = YES;不幸的是,只隐藏了后退箭头。你找到解决这个困境的办法了吗?
  • @ChrisBrasino,不,你可以再问一个问题,别人会解决的。
猜你喜欢
  • 1970-01-01
  • 2014-06-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-24
  • 1970-01-01
  • 2012-05-01
  • 2012-02-02
  • 2012-05-01
相关资源
最近更新 更多