use*_*665 20 cocoa-touch uinavigationbar storyboard uinavigationcontroller ios
我有一个侧面菜单滑出来显示一个表视图,从那里我有segues使用显示视图控制器.segue必须直接连接到视图控制器; 我不能使用导航控制器.
如何在没有导航控制器的情况下添加带有条形按钮项的导航栏?


rau*_*ora 20
虽然有几种聪明的方法可以回答你的问题.我刚刚以编程方式解决了它并在我的代码中编写了以下代码viewWillAppear(注意 - viewDidLoad也没关系,但不建议) -
-(void) viewWillAppear:(BOOL)animated {
UINavigationBar *myNav = [[UINavigationBar alloc]initWithFrame:CGRectMake(0, 0, 320, 50)];
[UINavigationBar appearance].barTintColor = [UIColor lightGrayColor];
[self.view addSubview:myNav];
UIBarButtonItem *cancelItem = [[UIBarButtonItem alloc] initWithTitle:@"Cancel"
style:UIBarButtonItemStyleBordered
target:self
action:nil];
UIBarButtonItem *doneItem = [[UIBarButtonItem alloc] initWithTitle:@"Done"
style:UIBarButtonItemStyleBordered
target:self action:nil];
UINavigationItem *navigItem = [[UINavigationItem alloc] initWithTitle:@"Navigation Title"];
navigItem.rightBarButtonItem = doneItem;
navigItem.leftBarButtonItem = cancelItem;
myNav.items = [NSArray arrayWithObjects: navigItem,nil];
[UIBarButtonItem appearance].tintColor = [UIColor blueColor];
}
因此,您有一个带有蓝色条形按钮项目的白色导航栏,没有导航控制器.同样,在您的情况下还有其他方法可以实现它.希望,这很有帮助.
输出 -

更新 -
要添加图片 -
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];
Run Code Online (Sandbox Code Playgroud)
斯威夫特 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.leftBarButtonItem = cancelButton
navigationItem.rightBarButtonItem = doneButton
navigationBar.items = [navigationItem]
Run Code Online (Sandbox Code Playgroud)
有一种方法可以使用NavigationItemin interface builder.
首先添加NavigationItem到您ViewController在界面生成器,就像你使用一个NavigationController.请务必使NavigationBar是选择与其它有形的东西Inferred,并None在模拟的指标.
其次,在viewDidLoad,只需添加以下行:
- (void)viewDidLoad
{
[super viewDidLoad];
UINavigationBar *bar = [[UINavigationBar alloc] initWithFrame: frame];
bar.items = @[self.navigationItem];
[self.view addSubview: bar];
}
Run Code Online (Sandbox Code Playgroud)
至于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);
Run Code Online (Sandbox Code Playgroud)
如果您希望支持不同的方向,请使用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],
]];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
37075 次 |
| 最近记录: |