2016-02-13 175 views
0

我在导航栏中添加了自定义的标题视图。导航栏的标题视图重叠

在每次屏幕更改时,我都会添加另一个标题视图。

问题是前一个没有被删除,我可以一次查看所有视图。

这里是我的代码:

UILabel *lblTitle = [[UILabel alloc] init]; 
lblTitle.text = text; 
CGSize lblSize = [Utility sizeOfText:text withFont:kCGFontMedium(19)]; 
lblTitle.frame = CGRectMake(60, 9, lblSize.width, lblSize.height); 
lblTitle.font =kCGFontMedium(19); 
lblTitle.backgroundColor = [UIColor clearColor]; 
lblTitle.textColor = [UIColor whiteColor]; 
[lblTitle sizeToFit]; 

    [self.navigationController.navigationBar addSubview:lblTitle]; 

我的问题: 注册并登录,重叠 enter image description here

+1

的问题是每次添加新的子视图,而不是替换原有的子视图。尝试将旧子视图设置为零,或者使用新子视图重新分配旧子视图。 – RPK

+0

@RPK如何更换旧的Subivew..Means如何在新的屏幕中获取Old Subview的引用 – Dalvik

+1

当您在UINavigationController中推送并弹出视图控制器时,视图控制器可能会更改,但导航控制器保持不变。您可以尝试对UINavigationController进行子分类并保留对导航栏子视图的类引用。然后,您可以在viewDidLoad中添加子视图一次,然后在需要时更改它。 – RPK

回答

2

解决方案1:每次你要删除自定义的UIView对象时添加到导航栏

[self.navigationController.navigationBar.subviews enumerateObjectsWithOptions:0 usingBlock:^(__kindof UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { 

    if ([obj isMemberOfClass:[UILabel class]]) { 

     [obj removeFromSuperview]; 

    } 

}]; 

UILabel *lblTitle = [UILabel new]; 
lblTitle.text = text; 
CGSize lblSize = [Utility sizeOfText:text withFont:kCGFontMedium(19)]; 
lblTitle.frame = CGRectMake(60, 9, lblSize.width, lblSize.height); 
lblTitle.font = kCGFontMedium(19); 
lblTitle.backgroundColor = [UIColor clearColor]; 
lblTitle.textColor = [UIColor whiteColor]; 
[lblTitle sizeToFit]; 
[self.navigationController.navigationBar addSubview:lblTitle]; 

解决方案2:在类接口中添加属性以存储对自定义子视图的访问EW中的导航栏

@property (weak, readwrite, nonatomic) UILabel *navSubView; 

[self.lblTitle removeFromSuperview]; 
self.lblTitle = [UILabel new]; 
lblTitle.text = text; 
CGSize lblSize = [Utility sizeOfText:text withFont:kCGFontMedium(19)]; 
lblTitle.frame = CGRectMake(60, 9, lblSize.width, lblSize.height); 
lblTitle.font = kCGFontMedium(19); 
lblTitle.backgroundColor = [UIColor clearColor]; 
lblTitle.textColor = [UIColor whiteColor]; 
[lblTitle sizeToFit]; 
[self.navigationController.navigationBar addSubview:lblTitle]; 
+0

谢谢它正在按预期工作..但我有一个疑问..假设我有六个屏幕,然后在所有六个屏幕上我必须写这个代码? – Dalvik

0

或者你可以只使用NavigationItem的 “titleview的” 属性

的UILabel * titleLabel = [[的UILabel的alloc]初始化]。你可以使用下面的代码来实现这个功能:* titleView = [[UIView alloc] initWithFrame:titleLabel.frame]; [titleView addSubview:titleLabel];

self.navigationItem.titleView = titleView;

这将确保只有一个标题标签的实例存在,它不会重叠self.title要么