自定义导航栏 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 在加载新标题之前不会清除以前的标题的主要内容,如果未能解决你的问题,请参考以下文章
当 prefersLargeTitles 为 true 时自定义 NavigatioItem TitleView