我应该啥时候设计我的 UINavigationBar?

Posted

技术标签:

【中文标题】我应该啥时候设计我的 UINavigationBar?【英文标题】:When should I design my UINavigationBar?我应该什么时候设计我的 UINavigationBar? 【发布时间】:2017-10-20 11:22:17 【问题描述】:

我有一个 ViewController,它有一个设计 UINavigationBar 的方法,一个继承自 ViewController 并调用其设计方法的 SubViewController,以及一个继承自 SubViewController 的 ShowingViewController 和一个 SecondViewController。

ShowingViewController 是 UINavigationController 的根控制器,它对 SecondViewController 执行“显示”Segue。 它们都有 NSString 属性“presentingProperty”。 ViewController 为显示属性字符串的导航栏设置了一个自定义的 titleView。

我的问题:我应该在哪里调用 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];

感谢您的帮助。

【问题讨论】:

【参考方案1】:

你可以试试这个。

- (void)viewDidLoad

      self.navigationItem.titleView = <your titleView>

- (void)viewWillLayoutSubviews

     <your titleView>.frame = CGRectMake(....)

【讨论】:

【参考方案2】:

您应该在以下位置为导航栏设置 titleView:

- (void)viewWillAppear:(BOOL)animated 
    [super viewWillAppear: animated];

    <your titleView code here>

这在第一次 viewDidLoad 之后调用,稍后在当前视图控制器之上的其他视图控制器从导航堆栈中弹出时调用。 ViewController 生命周期的良好状态图可以在https://developer.apple.com/documentation/uikit/uiviewcontroller#1652793 的文档中找到

在样式点上,也可以用这段代码设置titleView:

self.navigationItem.titleView = <your-view>;

【讨论】:

以上是关于我应该啥时候设计我的 UINavigationBar?的主要内容,如果未能解决你的问题,请参考以下文章

作为开发人员,我应该啥时候测试我的网站?

我应该啥时候分离我的 Firestore 监听器? [复制]

我应该啥时候检查互联网连接

我应该啥时候清除我的 iOS 应用程序的垃圾数据?在启动或终止期间?

我啥时候应该使用“隐藏文本框”,啥时候应该使用(html 5)“数据属性”?

我啥时候应该继承 EnumMeta 而不是 Enum?