如何在没有导航控制器的情况下将导航栏添加到视图
大家好我在我的应用程序,我有一个侧面菜单滑出来显示一个表格视图和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]; }
至于frame
, width
将与您的ViewController
相同, height
将是44.0
或64.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]