在 iPad mini iOS 8 上运行 iPhone 应用程序会导致 UIActivityViewController 中的图标大小错误

Posted

技术标签:

【中文标题】在 iPad mini iOS 8 上运行 iPhone 应用程序会导致 UIActivityViewController 中的图标大小错误【英文标题】:Running iPhone app on iPad mini iOS 8 results in wrong icon size in UIActivityViewController 【发布时间】:2015-04-08 07:26:09 【问题描述】:

我有一个在 iPad mini ios 8 上运行的 iPhone 应用程序(不支持 Universal)。但我发现 UIActivityViewController 中的图标大小不正确。如何解决?

只需初始化默认的 UIActivityViewController 即可重现该问题。

UIActivityViewController *avc = [[UIActivityViewController alloc] initWithActivityItems:@[@"hello"] applicationActivities:nil];
[self presentViewController:avc animated:YES completion:nil];

不正确的行为如下: https://drive.google.com/file/d/0B2C5utygT1vHSnlGUzRVdU5YSTA/view?usp=sharing

【问题讨论】:

【参考方案1】:

这里有 3 件事需要注意:

    图片背景, 图像不透明, 图像大小。

iOS 7

    图片背景

图片背景应该是透明的。

    图像不透明度

图标的“可见部分”应该是不透明的,也就是不透明的。请注意,任何颜色信息都不会保留

    图片尺寸

因为图像太小/太大,系统不会缩放,所以您必须提供适当尺寸的图像。我发现图像大小 120px x 120px 非常适合。

注意:这个尺寸也考虑了图标的内边距。


iOS 8

    图片背景

图像背景应为白色以匹配系统UIAction图标,但您也可以使用任意颜色。

    图像不透明度

与 iOS 7 相同,图标的“可见”部分应该是不透明的,也就是不透明的,但是在 iOS 8 中颜色信息将被保留

    图片尺寸

我正在使用尺寸为240px x 240px 的图像,但您可以应用自定义尺寸的图像,因为如果图像太小/太大,系统会自动缩放以填充图像


总结

也就是说,如果你想同时支持 iOS 7 和 iOS 8,你必须有 2 个版本的自定义 UIActivity 图标图像。

对于 iOS 7,您应该使用 120 像素 x 120 像素 大小的图片以及 透明背景注意:找到最适合您需要的尺寸。

对于 iOS 8,您应该使用具有白色背景和任意颜色的“可见”部分的自定义尺寸方形图像。

代码示例

#define isAtLeastiOS8 ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)


- (UIImage *)activityImage

    if (isAtLeastiOS8)
    
        return [UIImage imageNamed:@"activity_icon_ios8"];
    
    else
    
        return [UIImage imageNamed:@"activity_icon"];
    

希望有帮助!

感谢@damirstuhec

【讨论】:

感谢您的回答。但是不正确的图标是默认图标,我自己没有提供图像。那么我应该覆盖默认图像吗? 如果显示相同的行为,您能否检查 iPad 上的任何其他 iPhone 应用程序? 如果我的回答对您有帮助,请将其标记为已选择 :) 我刚刚检查过,这似乎是一个 iOS 错误。当应用程序是 iPhone 应用程序(不支持通用)但在 iPad 上打开时会发生这种情况。我刚刚打开了一个普通的项目,它只打开了一个默认的 UIActivityViewController。而且图标还在放大。 你试试一些已经从 AppStore 发布的 iPhone 应用程序,然后安装到你的 iPad 上试试。如果它是 iOS 中的错误,或者我们遗漏了什么,这将消除疑虑。【参考方案2】:

您可能使用的图片尺寸太大而无法放入该区域,请尝试使用带有1x2x 的多个尺寸图片,这可以解决您的问题,例如将相同的图片转换为两种尺寸徽标,30x30 和 60x60,并将它们命名为

30x30 图标为 -> sampleLogo.png

60x60 图标为 -> sampleLogo@2x.png

Images.xcassets 中以相同的名称导入这些(不是两个不同的图像),然后尝试使用它。

编辑: 30x30 和 60x60 只是为了给您一个想法,如果您的应用程序与 iPhone 6 Plus 兼容,那么您可能还需要使用在给定示例中为 90x90 的 3x 图像

【讨论】:

感谢您的回答。但是不正确的图标是默认图标,我自己没有提供图像。那么我应该覆盖默认图像吗?【参考方案3】:

这些图片需要有透明背景,我推荐以下尺寸: // iPadShare@2x 应该是 126 像素,iPadShare 应该是 53 像素,iPhoneShare@2x 应该是 100 像素,iPhoneShare 应该是 50 像素。我发现这些尺寸适合我正在制作的东西。

希望这会有所帮助:)

【讨论】:

嗨,Arpit,作为我附加的图像,错误的图标是 iOS 默认图标:消息、邮件等。图像不是由我的应用程序提供的。

以上是关于在 iPad mini iOS 8 上运行 iPhone 应用程序会导致 UIActivityViewController 中的图标大小错误的主要内容,如果未能解决你的问题,请参考以下文章

在 Xcode 6 上的 iPad Mini Retina 上运行应用程序

Phonegap 无法在 iPad 视网膜 mini iOS7 中使用相机

iOS 7 onchange 事件在 iPad 3+Mini 中被破坏 // 需要解决

iPad Mini 上的 iOS 内存管理

我的应用在 iPad 模拟器上运行良好,但在 iPad(iOS 8.4)上崩溃,xcode 说无法在捆绑中加载 NIB

ipad+mini2更新ios8都有哪些新功能