更改viewControllers时会剪切UINavigationBar标题

时间:2012-03-13 16:06:43

标签: ios uinavigationbar

当我从iOS应用程序的开始屏幕推送一个新的tableViewController时(我按下“设置”屏幕),UINavigationController中的标题将被剪切,直到动画结束:

enter image description here

这是动画中期的NavigationBar,就在动画结束之前,它看起来像这样:

enter image description here

片刻之后,标题会正确更改为“设置”。这不是什么大不了的事,但是你可以想象它会让一个稍微喜欢OCD的程序员烦恼多少! :)

这是tableViewController中我设置标题的代码,没什么特别的:

- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];
    if (self) {
        self.title = @"Settings";
        // Hide tabBar when pushed so you cannot switch from the Settings
        self.hidesBottomBarWhenPushed = YES;
        self.tableView.backgroundColor = [UIColor colorWithPatternImage: [UIImage imageNamed:@"bg.png"]];
    }
    return self;
}

3 个答案:

答案 0 :(得分:1)

我的答案有点迟了,但我在iOS 5上追踪了这个问题。当你在UINavigationBar上使用UIAppearance代理时,你似乎需要明确设置字体大小,而不是使用0.0来让它它根据方向自动设置。

我能够通过继承UINavigationController并输入以下代码来解决这个问题:

- (void)viewWillLayoutSubviews {
    [super viewWillLayoutSubviews];

    // You should include a conditional here to check for iOS 5, so iOS 6 doesn't have to do any additional work
    self.navigationBar.titleTextAttributes = @{
        UITextAttributeFont:[UIFont boldSystemFontOfSize:UIInterfaceOrientationIsPortrait(self.interfaceOrientation) || IS_IPAD ? 20.0f : 16.0f],
        UITextAttributeTextColor:[UIColor whiteColor],
        UITextAttributeTextShadowColor:[UIColor colorWithWhite:0.0f alpha:0.5f],
        UITextAttributeTextShadowOffset:[NSValue valueWithUIOffset:UIOffsetMake(0.0f, -1.0f)]
    };
}

答案 1 :(得分:0)

尝试设置

self.navigationItem.title = self.title;
viewWillAppear方法中的

答案 2 :(得分:0)

尝试

- (void)viewWillAppear:(BOOL)animated {

    self.title = @"Settings";
}