我有一个ViewController,它有一个设计UINavigationBar的方法,一个继承自ViewController并调用其设计方法的SubViewController,以及一个继承自SubViewController的ShowingViewController和SecondViewController。
ShowingViewController是UINavigationController的根控制器,并对SecondViewController执行“Show”Segue。 它们都具有NSString属性“presentingProperty”。 ViewController将自定义titelView设置到显示属性字符串的导航栏。
我的问题:我应该在哪里调用ViewController的设计方法?
当我在viewWillLoad中调用它时,当我切换到SecondViewController时我将无法工作,因为该方法更改了“旧”ShowingViewController的NavigationBar。
当我在viewDidLoad中调用它时,用户将在之前看到未指定的NavigationBar。
我的设计方法代码:
if (self.navigationController.navigationBar) {
UILabel *titleLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 200, 21)];
NSMutableAttributedString *titleText = [[NSMutableAttributedString alloc] initWithString:self.presentingProperty];
[titleText addAttribute: NSForegroundColorAttributeName value: [UIColor whiteColor] range: NSMakeRange(0, self.presentingProperty.length)];
[titleText addAttribute:NSFontAttributeName value:[UIFont fontWithName:@"Avenir-Heavy" size:21] range:NSMakeRange(0, self.presentingProperty.length)];
[titleLabel setTextAlignment:NSTextAlignmentCenter];
[titleLabel setAttributedText: titleText];
[self.navigationController.navigationBar.topItem setTitleView:titleLabel];
}
感谢您的帮助。
答案 0 :(得分:1)
你可以试试这个。
- (void)viewDidLoad
{
self.navigationItem.titleView = <your titleView>
}
- (void)viewWillLayoutSubviews
{
<your titleView>.frame = CGRectMake(....)
}
答案 1 :(得分:0)
您应该在以下位置为navigationBar设置titleView:
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear: animated];
<your titleView code here>
}
这是第一次在 viewDidLoad 之后调用,稍后当导航堆栈上弹出当前其他ViewControllers时调用。可以在sortedBy
在样式上,您还可以使用以下代码设置titleView:
self.navigationItem.titleView = <your-view>;