如何在没有导航控制器的情况下将导航栏添加到视图

大家好我在我的应用程序,我有一个侧面菜单滑出来显示一个表格视图和forms在那里我有使用揭示视图控制器segues。 segue必须直接连接到视图控制器,否则应用程序崩溃,所以我不能使用导航控制器。 我的问题是如何添加一个没有导航控制器的酒吧button项导航栏。 我在故事板上完成了所有的布局。

故事板上有导航项目

该应用程序不

虽然有几个聪明的方法来回答你的问题。 我刚刚编程解决了这个问题,并在我的viewWillAppear (注意 – viewDidLoad也行,但不build议)中写下面的代码 –

 - (void)viewWillAppear:(BOOL)animated {

     UINavigationBar * myNav = [[UINavigationBar alloc] initWithFrame:CGRectMake(0,0,320,50)];
     [UINavigationBar外观] .barTintColor = [UIColor lightGrayColor];
     [self.view addSubview:myNav];


     UIBarButtonItem * cancelItem = [[UIBarButtonItem alloc] initWithTitle:@“Cancel”
                                                                   风格:UIBarButtonItemStyleBordered
                                                                  目标:自
                                                                  动作:无];

     UIBarButtonItem * doneItem = [[UIBarButtonItem alloc] initWithTitle:@“Done”
                                                                 风格:UIBarButtonItemStyleBordered
                                                                目标:自我行动:无];


     UINavigationItem * navigItem = [[UINavigationItem alloc] initWithTitle:@“Navigation Title”];
     navigItem.rightBarButtonItem = doneItem;
     navigItem.leftBarButtonItem = cancelItem;
     myNav.items = [NSArray arrayWithObjects:navigItem,nil];

     [UIBarButtonItem外观] .tintColor = [UIColor blueColor];
 }

所以,你有一个没有导航控制器的蓝色栏button项目的白色导航栏。 同样,还有其他的方法来实现你的情况。 希望,这是有帮助的。

输出 –

在这里输入图像说明

更新

添加图像 –

 UIImageView *myImage = [[UIImageView alloc] initWithFrame:CGRectMake(0,10,32,32)]; [myImage setImage:[UIImage imageNamed:@"image.png"]]; self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:myImage]; [self.view addSubview:myImage]; 

有一种方法可以在界面生成器中为此使用NavigationItem

首先添加一个NavigationItem到你的ViewController的界面生成器中,就像使用NavigationController 。 确保通过在模拟度量标准下select“ Inferred和“ None之外的None来显示“ NavigationBar

其次,在viewDidLoad ,只需添加以下几行:

 - (void)viewDidLoad { [super viewDidLoad]; UINavigationBar *bar = [[UINavigationBar alloc] initWithFrame: frame]; bar.items = @[self.navigationItem]; [self.view addSubview: bar]; } 

至于framewidth将与您的ViewController相同, height将是44.064.0取决于status bar是否可见

 CGFloat navigationBarHeight = 44.f + [UIApplication sharedApplication].statusBarFrame.size.height; CGRect frame = CGRectMake(0, 0, self.view.frame.size.width, navigationBarHeight); 

如果你想支持不同的方向使用NSLayoutConstraints

  CGFloat navigationBarHeight = 44.f + [UIApplication sharedApplication].statusBarFrame.size.height; [self.view addConstraints: @[ [NSLayoutConstraint constraintWithItem: self.view attribute: NSLayoutAttributeLeft relatedBy: NSLayoutRelationEqual toItem: bar attribute: NSLayoutAttributeLeft multiplier: 1.0 constant: 0.0], [NSLayoutConstraint constraintWithItem: self.view attribute: NSLayoutAttributeRight relatedBy: NSLayoutRelationEqual toItem: bar attribute: NSLayoutAttributeRight multiplier: 1.0 constant: 0.0], [NSLayoutConstraint constraintWithItem: self.view attribute: NSLayoutAttributeTop relatedBy: NSLayoutRelationEqual toItem: bar attribute: NSLayoutAttributeTop multiplier: 1.0 constant: 0.0], [NSLayoutConstraint constraintWithItem: bar attribute: NSLayoutAttributeHeight relatedBy: NSLayoutRelationEqual toItem: nil attribute: NSLayoutAttributeNotAnAttribute multiplier: 1.0 constant: navigationBarHeight], ]]; 

Swift 4版本

  let navigationBar = UINavigationBar(frame: CGRect(x: 0, y: 0, width: 320, height: 50)) navigationBar.barTintColor = UIColor.lightGray view.addSubview(navigationBar) let cancelButton = UIBarButtonItem(barButtonSystemItem: .cancel, target: self, action: nil) let doneButton = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: nil) let navigationItem = UINavigationItem(title: "Title") navigationItem.rightBarButtonItem = cancelButton navigationItem.leftBarButtonItem = doneButton navigationBar.items = [navigationItem]