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

Posted

技术标签:

【中文标题】UINavigationBar 中的项目未填充屏幕宽度【英文标题】:Items in UINavigationBar not filling width of screen 【发布时间】:2013-05-07 20:18:10 【问题描述】:

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

导航栏本身是在情节提要中手动添加的。它设置为自动调整大小和拉伸,并选中 Autoresize Subviews。

如何让它始终正确显示导航栏?

相关设置代码如下所示。

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

初始加载到横向

旋转到纵向

转回横向

【问题讨论】:

可以添加一些截图吗? 【参考方案1】:

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

[buttonsItem.titleView setAutoresizingMask:UIViewAutoresizingFlexibleWidth];

【讨论】:

这些似乎都不适合我。由于我手动添加导航栏的方式,我认为 UINavigationItem 不起作用。附加信息已添加到帖子中。 DiaryCalendarPickerViewController 是否继承自 UINavigationController?如果是这样,为什么需要手动添加导航栏?设置条形按钮项目的代码应该在任何视图被推送到导航控制器的 viewDidLoad 中 继承自 UIViewController。我相信它没有得到标准的 NavBar,因为它是被呈现而不是被推送。 我假设您使用的是导航控制器,我猜想由于故事板/笔尖设置为纵向,它将导航栏初始化为错误的帧大小。看我的回答 好吧,你让我找到了正确的答案。我不需要 UIViewAutoresizingFlexibleWidth,但我将设置代码从 ViewDidLoad 移动到 ViewDidAppear,现在它的间距正确。【参考方案2】:

我有同样的问题,你的评论是正确的答案,对于有同样问题的人来说,修复它,但是右栏按钮或右导航栏项目的代码进入 ViewDidAppear,它会像魅力一样工作!

【讨论】:

以上是关于UINavigationBar 中的项目未填充屏幕宽度的主要内容,如果未能解决你的问题,请参考以下文章

iOS 故事板 - 添加 UINavigationBar 时未出现

以编程方式将 UIButton 添加到 UINavigationBar 的子视图,并且触摸事件未注册

UINavigationBar 标题文本部分显示在屏幕上

如何防止 UINavigationBar 在 iOS 7 中覆盖视图顶部?

iOS 7 - 使 UINavigationBar 扩展到屏幕顶部

UINavigationBar 的标题不会随着 push segue 的转换而改变