在IOS Objective c应用程序中自定义导航栏

在IOS Objective c应用程序中自定义导航栏,ios,objective-c,uinavigationbar,Ios,Objective C,Uinavigationbar,我想要我的导航栏像这样 我可以通过以下代码设置左侧按钮: -(void) setNavigationButtons:(NSString *)title{ UIImage *logoImage = [UIImage imageNamed:@"back-icon"]; UIButton *logoBackButton = [UIButton buttonWithType:UIButtonTypeCustom]; [logoBackButton setImage:logoIm

我想要我的导航栏像这样

我可以通过以下代码设置左侧按钮:

-(void) setNavigationButtons:(NSString *)title{
    UIImage *logoImage = [UIImage imageNamed:@"back-icon"];
    UIButton *logoBackButton = [UIButton buttonWithType:UIButtonTypeCustom];
    [logoBackButton setImage:logoImage forState:UIControlStateNormal];
    logoBackButton.frame = CGRectMake(0.0, 0.0, 50, 50);
    UIBarButtonItem *backBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:logoBackButton];
    [logoBackButton addTarget:self action:@selector(backAction:) forControlEvents:UIControlEventTouchDown];
    [self.navigationController.navigationBar setTitleTextAttributes:
 @{NSForegroundColorAttributeName:[Constants Instance].whiteColor}];
    self.navigationController.navigationBar.barTintColor = [Constants Instance].navigationTitleColor;
    [self setNavigationTitle:title];
    self.navigationItem.leftBarButtonItem = backBarButtonItem;
}

-(void)setNavigationTitle:(NSString *)title{
    self.navigationItem.title = title;
    [self.navigationController.navigationBar setTitleTextAttributes:
    @{NSForegroundColorAttributeName:[UIColor whiteColor],
    NSFontAttributeName:[UIFont fontWithName:@"Nexa Light" size:20]}];
}

- (IBAction)backAction:(id)sender {
    [self.navigationController popViewControllerAnimated:YES];
}
但它并没有附在左侧,并且有边缘。我想把它固定在左边,就像上面的截图一样。我不想在那个按钮上显示任何像back之类的文本

类似的情况也发生在右键上

编辑 结果是:

如果我在代码末尾添加这一行,我将面临更多的问题

self.navigationItem.rightBarButtonItem = backBarButtonItem;

如果同时显示右按钮,则仅显示右按钮,而不显示左按钮。意思是我不能同时设置两个按钮。

隐藏真正的导航栏,然后添加
UIView
,它将充当
导航栏
。并在其上添加两个按钮。视图的框架应为
(0,0,64,屏幕宽度)
。这对您来说会更容易,因为根据您的屏幕截图,您不需要此屏幕的后退按钮,因此您应该隐藏此屏幕的
导航栏
,这比定制真正的导航栏更容易

隐藏真正的导航栏,并添加
UIView
,它将充当
导航栏
。并在其上添加两个按钮。视图的框架应为
(0,0,64,屏幕宽度)
。这对您来说会更容易,因为根据您的屏幕截图,您不需要此屏幕的后退按钮,因此您应该隐藏此屏幕的
导航栏
,这比定制真正的导航栏更容易

请删除导航栏。显示左右两侧带有按钮的自定义视图

-(void) viewWillAppear {
[super viewWillAppear]; 
self.navigationcontroller.navigationbar.setHidden = YES;
CGRect screenRect = [[UIScreen mainScreen] bounds]; 
CGFloat screenWidth = screenRect.size.width 
UIView *myNavView = [UIView alloc] initWithFrame:CGRectMake(0, 0, 64, screenWidth)]; 
[[self view] addSubview: myNavView];
} 

请删除导航栏。显示左右两侧带有按钮的自定义视图

-(void) viewWillAppear {
[super viewWillAppear]; 
self.navigationcontroller.navigationbar.setHidden = YES;
CGRect screenRect = [[UIScreen mainScreen] bounds]; 
CGFloat screenWidth = screenRect.size.width 
UIView *myNavView = [UIView alloc] initWithFrame:CGRectMake(0, 0, 64, screenWidth)]; 
[[self view] addSubview: myNavView];
} 

请添加实际结果的屏幕截图,以便更好地理解问题。请发布您所获得的图像,以便其他人可以对其进行调整。好的,我已删除该代码以供其他尝试,给我2分钟,我会上传有问题的图片。我添加了截图。请添加实际结果的截图,以便更好地理解问题。请发布您获得的图片,以便其他人可以对其进行调整。好的,我已删除该代码,以便其他人尝试,给我2分钟,我会上传有问题的图片。我已经添加了截图。我可以有更多的细节吗?导航控制器不允许我在导航控制器中添加任何内容。隐藏导航栏,使用我在回答中提到的框架从
viewdiload
添加新的uiview,并向该视图添加两个按钮。不是这样!同样的事情你也可以从interfacebuilder做!这意味着我必须在我所有的VC中添加它?类似这样的东西:
-(void)viewwillbeen[super viewwillbeen];CGRect screenRect=[[UIScreen mainScreen]边界];CGFloat screenWidth=screenRect.size.width UIView*myNavView=[UIView alloc]initWithFrame:CGRectMake(0,0,64,screenWidth)];[[self view]addSubview:myNavView]然后将按钮添加到其中。我同意Lion的观点,这是更好的方法。如果你愿意的话,你就可以把所有你想要的东西都制作成动画。我可以有更多的细节吗?导航控制器不允许我在导航控制器中添加任何内容。隐藏导航栏,使用我在回答中提到的框架从
viewdiload
添加新的uiview,并向该视图添加两个按钮。不是这样!同样的事情你也可以从interfacebuilder做!这意味着我必须在我所有的VC中添加它?类似这样的东西:
-(void)viewwillbeen[super viewwillbeen];CGRect screenRect=[[UIScreen mainScreen]边界];CGFloat screenWidth=screenRect.size.width UIView*myNavView=[UIView alloc]initWithFrame:CGRectMake(0,0,64,screenWidth)];[[self view]addSubview:myNavView]然后将按钮添加到其中。我同意Lion的观点,这是更好的方法。然后,如果您愿意,您将能够设置所有您想要的动画。