自定义导航栏 titleView 在加载新标题之前不会清除以前的标题

Posted

技术标签:

【中文标题】自定义导航栏 titleView 在加载新标题之前不会清除以前的标题【英文标题】:Custom navbar titleView won't clear previous titles before loading new ones 【发布时间】:2012-03-09 03:02:43 【问题描述】:

所以我创建了一个自定义 UINavigationItem 类别,以便能够为我的导航栏制作自定义标题视图,但是每次我推送/弹出视图时,它只是添加新标题而不会删除导致标题的旧标题只是一堆字母。以下是相关代码:

@implementation UINavigationItem (CustomNavigationItem)
-(UIView *)titleView

    [self setTitleView:nil];
    UILabel *newTitleView           = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 220, 32)];
    newTitleView.center             = CGPointMake(160, 22);
    newTitleView.backgroundColor    = [UIColor clearColor];
    newTitleView.textColor          = [UIColor whiteColor];
    newTitleView.textAlignment      = UITextAlignmentCenter;
    newTitleView.text               = self.title;
    newTitleView.textAlignment      = UITextAlignmentCenter;
    return newTitleView;


@end

【问题讨论】:

在 return 之后调用的任何东西都不会被执行(这就是为什么它被称为'return'),但你最大的问题是如果要执行该代码,它将无限递归。 对不起,return 后的语句有错别字。这是递归,还是我遗漏了一些明显的东西? 【参考方案1】:

您必须从其超级视图中删除旧的 uilabel,设置为 nil 它不会这样做。这就是为什么你把屏幕上的字母弄乱了。我也不认为您正在递归,因为您正在调用 setter,但我可能错了。

您可以快速地为您最新创建的视图分配一个标签。

[[self.view viewWithTag:YourCustomEnumTag] removeFromSuperView];
// create your view....
textView.tag=YourEnumCustomTag;

【讨论】:

以上是关于自定义导航栏 titleView 在加载新标题之前不会清除以前的标题的主要内容,如果未能解决你的问题,请参考以下文章

iOS系统导航栏自定义标题动画跳变解析

当 prefersLargeTitles 为 true 时自定义 NavigatioItem TitleView

没有导航器导航栏没有显示titleView

您如何确定自定义 UINavigationItem.titleView 的大小/框架?

更改导航栏文本颜色

如何在 Swift 的导航栏顶部显示自定义视图?