当方向从横向更改为纵向时,UInavigationbar 背景图像无法正确调整大小

Posted

技术标签:

【中文标题】当方向从横向更改为纵向时,UInavigationbar 背景图像无法正确调整大小【英文标题】:UInavigationbar background image does not resize correctly when orientation changes from landscape to portrait 【发布时间】:2013-04-22 12:10:36 【问题描述】:

我正在尝试将 uinavigationbar 的背景图像设置为纵向和横向。我正在使用以下代码:

UIImage *navbarImage = [[UIImage imageNamed:@"navbar"]
                            resizableImageWithCapInsets:UIEdgeInsetsMake(0, 9.0, 0, 9.0)];
UIImage *navbarLandscapeImage = [[UIImage imageNamed:@"navbar-landscape"]
                                 resizableImageWithCapInsets:UIEdgeInsetsMake(0, 9.0, 0, 9.0)];
[[UINavigationBar appearance] setBackgroundImage:navbarImage
                                   forBarMetrics:UIBarMetricsDefault];
[[UINavigationBar appearance] setBackgroundImage:navbarLandscapeImage
                                   forBarMetrics:UIBarMetricsLandscapePhone];

但是,在 ios5.1 模拟器中,当我将方向从纵向更改为横向再到纵向时,使用的图像是 navbar-landscape.png 而不是 navbar.png。

以下是一些示例图片:

纵向默认:

更改为横向:

改回纵向:

有没有人知道这里的问题是什么?我不确定为什么使用了错误的图像。

【问题讨论】:

【参考方案1】:

其实,问题出在模拟器上。我尝试了上述所有解决方案,但都没有解决问题何时得到解决。

【讨论】:

【参考方案2】:

你在哪里设置这个?您可以尝试将其添加到 -(void)viewWillLayoutSubviews。

【讨论】:

我在我的应用程序中运行此代码:我的 appDelegate 中的didFinishLaunchingWithOptions 方法。【参考方案3】:

您可以只为横向和纵向提供一张图像,而无需两个不同的 两个不同的图像 而不是像这样给 UIEdgeinset

UIImage *navbarImage = [[UIImage imageNamed:@"navbar"]
                        resizableImageWithCapInsets:UIEdgeInsetsMake(0, 9.0, 0, 9.0)];

您可以指定顶部和底部插图,以便它可以调整高度

UIImage *navbarImage = [[UIImage imageNamed:@"navbar"]
                        resizableImageWithCapInsets:UIEdgeInsetsMake(some value according the image u have, 9.0, some value according the image u have, 9.0)];

【讨论】:

【参考方案4】:

在纵向模式下:UINavigationBar 高度 = 44。

在横向模式下:UInavigationbar 高度 = 32

如果您希望它们相同,则需要考虑它们的高度。例如:

- (void)viewWillAppear:(BOOL)animated 
    CGRect navframe = [[self.navigationController navigationBar] frame];
    navframe.size.height = 44.0f;
    [self.navigationController navigationBar].frame = navframe;

【讨论】:

像这样的硬编码大小是一个很大的禁忌。

以上是关于当方向从横向更改为纵向时,UInavigationbar 背景图像无法正确调整大小的主要内容,如果未能解决你的问题,请参考以下文章

在Objective C中点击后退按钮时如何将界面方向从横向更改为纵向

将 Cocos 2d 方向横向更改为纵向

仅在 iOS8 中,当 App 被锁定为纵向时,UIAlertView 更改为横向

如何将视图从纵向模式更改为横向模式并锁定它?

主视图控制器在点击项目并快速将方向从纵向更改为横向后消失

在Swift ios中方向更改为横向模式时隐藏底部表格视图