Ios 如何仅在一个UIViewController中将自定义UIView添加到UINavigationBar
好的,我正在尝试向我的navigationController的导航栏添加一个子视图,它工作得很好,但是,当推送细节控制器时,我不希望推送控制器的子视图出现在细节视图控制器的导航栏中 我感谢您提供的任何帮助/建议。重申:我需要子视图只显示在导航控制器的根目录中,而不显示在任何详细控制器中 以下是创建和添加navigationController子视图的当前代码:Ios 如何仅在一个UIViewController中将自定义UIView添加到UINavigationBar,ios,objective-c,uiview,uiviewcontroller,uinavigationcontroller,Ios,Objective C,Uiview,Uiviewcontroller,Uinavigationcontroller,好的,我正在尝试向我的navigationController的导航栏添加一个子视图,它工作得很好,但是,当推送细节控制器时,我不希望推送控制器的子视图出现在细节视图控制器的导航栏中 我感谢您提供的任何帮助/建议。重申:我需要子视图只显示在导航控制器的根目录中,而不显示在任何详细控制器中 以下是创建和添加navigationController子视图的当前代码: - (void)viewDidLoad { [super viewDidLoad]; self.ImageView
- (void)viewDidLoad
{
[super viewDidLoad];
self.ImageView = [[UIImageView alloc]init];
self.ImageView.frame = CGRectMake(0, 8.5, 320, 36);
self.ImageView.contentMode = UIViewContentModeScaleAspectFit;
self.ImageView.image = [UIImage imageNamed:@"Logo"];
self.ImageView.clipsToBounds = YES;
[self.navigationController.navigationBar addSubview:self.ImageView];
}
最好的办法是
如果您需要代码,请发表评论。最好的方法是
如果您需要代码,请提供注释。在推送至其他视图控制器时添加此行
[[self.navigationController.navigationBar viewWithTag:101] removeFromSuperview];
从其他viewController重新创建
- (void)viewWillApper
{
self.ImageView = [[UIImageView alloc]init];
self.ImageView.frame = CGRectMake(0, 8.5, 320, 36);
self.ImageView.contentMode = UIViewContentModeScaleAspectFit;
self.ImageView.image = [UIImage imageNamed:@"Logo"];
self.ImageView.clipsToBounds = YES;
self.ImageView.tag =101;
[self.navigationController.navigationBar addSubview:self.ImageView];
}
推送到其他视图控制器时添加此行
[[self.navigationController.navigationBar viewWithTag:101] removeFromSuperview];
从其他viewController重新创建
- (void)viewWillApper
{
self.ImageView = [[UIImageView alloc]init];
self.ImageView.frame = CGRectMake(0, 8.5, 320, 36);
self.ImageView.contentMode = UIViewContentModeScaleAspectFit;
self.ImageView.image = [UIImage imageNamed:@"Logo"];
self.ImageView.clipsToBounds = YES;
self.ImageView.tag =101;
[self.navigationController.navigationBar addSubview:self.ImageView];
}
也许您可以标记视图,self.ImageView.tag=100;然后,在详图控制器的视图中将显示:
UIView view = (UIView *) [self.navigationControler.navigationBar viewWithTag:100];
view.hidden = true;
在视野中,你将消失
UIView view = (UIView *) [self.navigationControler.navigationBar viewWithTag:100];
view.hidden = false;
也许您可以标记视图,self.ImageView.tag=100;然后,在详图控制器的视图中将显示:
UIView view = (UIView *) [self.navigationControler.navigationBar viewWithTag:100];
view.hidden = true;
在视野中,你将消失
UIView view = (UIView *) [self.navigationControler.navigationBar viewWithTag:100];
view.hidden = false;
这只会影响调用视图的ocontroller:
在navigationController的根视图控制器中
- (void) viewDidLoad {
// Create / instantiate from Nib / Use already initialized UIView
[self.navigationItem setTitleView:<your subView here>];
}
-(void)viewDidLoad{
//从Nib创建/实例化/使用已初始化的UIView
[self.navigationItem setTitleView:];
}
当您导航到其他某个viewController时,子视图将不在那里。这将仅影响调用视图ocontroller:
在navigationController的根视图控制器中
- (void) viewDidLoad {
// Create / instantiate from Nib / Use already initialized UIView
[self.navigationItem setTitleView:<your subView here>];
}
-(void)viewDidLoad{
//从Nib创建/实例化/使用已初始化的UIView
[self.navigationItem setTitleView:];
}
导航到其他viewController时,子视图将不在那里。为什么要在导航栏上添加uiimageview。你可以简单地尝试一下setBackgroundImage你不知道UINavigationBarNo的setBackgroundImage,那根本不是我想要的。我正在为中的徽标设置动画。动画意味着您是在代码中实现的,或者使用GIF图像,这可能会发布您的屏幕快照为什么要在导航栏上添加uiimageview。你可以简单地尝试一下setBackgroundImage你不知道UINavigationBarNo的setBackgroundImage,那根本不是我想要的。我正在为一个徽标制作动画。制作动画意味着你是在代码中实现的,或者使用GIF图像,可能会发布你的屏幕快照我之前尝试过类似的方法(不包括视图标记方法),结果是我使用了默认的边弹出手势,它会出现在错误的视图控制器中,并且会闪烁。请使用这种方法&注意ViewWillExample方法而不是ViewDidExample。我使用的是ViewWillExample方法,问题是它在使用交互式弹出手势时会立即出现。好的,看起来唯一的解决方案是在细节控制器中使用ViewWillDisplay,在演示控制器中使用ViewDidDisplay来解决此问题。我之前尝试过类似的方法(减去视图标记方法),结果是使用默认的边缘弹出手势,它会出现在错误的视图控制器中,并且会闪烁。请使用这种方法&注意ViewWillExample方法而不是ViewDidExample。我使用的是ViewWillExample方法,问题是它在使用交互式弹出手势时会立即出现。好的,看起来唯一的解决方案是在细节控制器中使用ViewWillDisplay,在演示控制器中使用ViewDidDisplay来解决此问题。