iPhone plus 和 iPad UIBarMetrics(不同的 landscape/portrait 导航栏图片)

iPhone plus and iPad UIBarMetrics (different landscape/portrait images for navigation bar)

如何在 iPhone (6-6s-7) plus 或 iPad 上为横向和纵向方向的导航栏背景设置 2 个不同的(例如红色和绿色)图像?

[[UINavigationBar appearance] setBackgroundImage:redImage
                                   forBarMetrics:UIBarMetricsDefault];
[[UINavigationBar appearance] setBackgroundImage:greenImage
                                   forBarMetrics:UIBarMetricsCompact];

不适用于 iPad 或 iPhone * 另外,两个方向始终使用 redImage。但适用于所有其他 iPhone(我猜甚至是 iPod)。

此外,阅读有关 iPhone 和 iPad / iPhone 之间条形指标(以及其他任何内容)差异的内容会很棒,另外,导致它(导航栏背景图像) ) 不仅仅是我已经意识到的在 (iPhone plus, iPad) 上具有特定行为的一件事(table 视图中的不同分隔符插图等)。

谢谢你。

您可以将您的视图控制器class(或其他可以控制状态栏的class)订阅到UIApplicationDidChangeStatusBarOrientationNotification。在处理程序中,您应该更新背景图片:

<...>
if ([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortrait ||
            [UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortraitUpsideDown)
    {
        image = redImage;
    }
    else
    {
        image = greenImage;
    }
<...>

您不能为此使用 UIBarMetrics,因为您的任务使用界面方向作为标准,但 UIBarMetrics 基于 size classes。因此,您不能使用外观来实现所需的行为。

我建议您创建 UINavigationBar 的自定义子 class 并在其中实现该逻辑。