UINavigationBar中的项目没有填充屏幕宽度

问题描述:

当我第一次加载我的视图控制器时,我为我的UINavigationBar设置了一些按钮和一个标题。如果我以纵向加载屏幕,一切看起来都很棒。但是,如果我在横向加载屏幕,按钮仅占用提供的部分空间。当我旋转到纵向并再次回到横向时,项目现在正确地展开以填充导航栏上的空间。UINavigationBar中的项目没有填充屏幕宽度

NavBar本身是在故事板中手动添加的。它被设置为自动调整和拉伸,并且Autoresize子视图被选中。

我该怎么做才能使其始终正确显示导航栏?

相对设置代码显示如下。

UIBarButtonItem * saveBtn = [[UIBarButtonItem alloc] initWithTitle:@"Set" style:UIBarButtonItemStyleBordered target:self action:@selector(setField)]; 
UIBarButtonItem * cancelBtn = [[UIBarButtonItem alloc] initWithTitle:@"Cancel" style:UIBarButtonItemStyleBordered target:self action:@selector(cancelClicked:)]; 

UINavigationItem * buttonsItem = [[UINavigationItem alloc] init]; 


NSString * title = [self.data objectForKey:@"title"]; 
if(title){ 
    buttonsItem.title = title; 
} else { 
    buttonsItem.title = @"Default Title"; 
} 

[buttonsItem setLeftBarButtonItem:cancelBtn animated:YES]; 
[buttonsItem setRightBarButtonItem:saveBtn animated:YES]; 
[navBar setItems:[[NSArray alloc] initWithObjects: buttonsItem, nil] animated:YES]; 

附加信息: 一些额外的信息,我以前曾忘了提。

我不是通过赛格瑞加载该屏幕上,而不是我这样做:

DiaryCalendarPickerViewController *navigationController = [self.storyboard instantiateViewControllerWithIdentifier:@"diaryCalendarForm"]; 
...   
[self presentViewController:navigationController animated:YES completion:nil]; 

最初加载到景观

Initial load in landscape

旋转为纵向

Rotate to portrait

Rot吃回景观

Rotate back to landscape

+0

你可以添加一些截图吗? – Undo 2013-05-07 20:25:56

后你布置你的看法,但设置导航项目之前尝试调用

[buttonsItem.titleView setAutoresizingMask:UIViewAutoresizingFlexibleWidth]; 
+0

这些都不适合我。我不认为UINavigationItem可以工作,因为我手动添加了NAB栏。其他信息已添加到帖子中。 – cain 2013-05-08 13:18:52

+0

DiaryCalendarPickerViewController是否继承自UINavigationController?如果有的话,为什么需要手动添加一个导航栏?用于设置条形按钮项目的代码应位于视图的任何视图的viewDidLoad中,并将其推送到导航控制器上。 – zimmryan 2013-05-08 14:40:03

+0

它从UIViewController继承。我相信它没有得到标准的NavBar,因为它被呈现而不是被推送。 – cain 2013-05-08 15:15:21

我有同样的问题恰好和您的评论该隐是正确的答案,对他们来说,有同样的问题,解决它,但正确的酒吧按钮或右侧导航栏项的代码到ViewDidAppear,它将像魅力一样工作!