0

我已经UINavigationController用我的初始视图控制器进行了所有设置,它允许用户输入一个值。它还有一个自定义的 UILabel 作为titleView,这样我就可以显示一个带有绿色文本的完全“扁平”的导航栏。

然后,当他们按下 a 时UIButton,它会将一个新视图推送到堆栈上,这显然会消除UINavigationItem带有我自定义 titleView 的那个。

我的问题是:我如何继续titleView可靠地为导航栏使用自定义视图?

我显然已经尝试过使用类的delegate方法(willPushdidPush),但第一个显然还topItem没有,所以它最终将我的 UILabel 添加到 current navigationItem,并且didPush在视图控制器动画之间存在明显的延迟,并且正在应用的新titleView标签。

我已经尝试并搜索了很多,但似乎没有什么工作正常,我不想在推送新的视图控制器时丢失动画。

有任何想法吗?

编辑:在下面发布了我的代码的粗略大纲示例,它不是 100% 完美,因为它是对我正在做的事情的概述,而不是直接从 XCode 粘贴。

// This code lives in the app delegate

// Set up the root view controller that needs to be contained
UIViewController *myFrontView = [[MYFrontViewController alloc] init];

// Set up the uinavigationcontroller
UINavigationController *myNavController = [[MYNavigationController alloc] initWithRootViewController: myFrontView];

// Customise the initial UINavbar titleView:
UILabel *myLabel = [[UILabel alloc] initWithText:@"My custom text"];

// Change the text Color.
myLabel.textColor = [UIColor redColor];

// Set my new label as the custom titleview.
[myNavController.navigationBar.topItem setTitleView: myLabel];

// Boilerplate code to make myNavController the rootViewController of the window etc.
4

1 回答 1

0

那是因为您正在设置titleView. UINavigationController这只会暂时改变当前的标题视图。

要正确更改标题视图,请使用titleView. UINavigationItem导航控制器框架会根据当前导航项为您设置视图UINavigationController,并确保动画流畅。

于 2013-06-26T15:17:24.793 回答