我已经能够更改后退按钮图标的垂直位置,但不能更改文本。
我在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子视图上进行任何帧更改。当我记录视图时,框架似乎正在改变,但文本在我的视图中没有移动。我做错了什么?
答案 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];