UINavigationBar中的项目未填充屏幕宽度

时间:2013-05-07 20:18:11

标签: ios uinavigationbar

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

NavBar本身是在storyboard中手动添加的。它被设置为自动调整大小和拉伸,并检查自动调整子视图。

如何使其始终正确显示导航栏?

相关设置代码显示如下。

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];

其他信息: 我之前忘记提及的一些其他信息。

我没有通过segue加载这个屏幕,而是我这样做:

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

初始加载到横向

Initial load in landscape

旋转至肖像

Rotate to portrait

旋转回横向

Rotate back to landscape

2 个答案:

答案 0 :(得分:1)

布局视图后,在设置导航项目之前,请尝试调用

[buttonsItem.titleView setAutoresizingMask:UIViewAutoresizingFlexibleWidth];

答案 1 :(得分:0)

我确实有同样的问题,而你的评论是正确的答案,对于谁有同样的问题,要解决它,但右键栏或右导航栏项目的代码到ViewDidAppear,它将像魅力一样工作! / p>