【发布时间】:2014-03-16 13:30:26
【问题描述】:
以下代码在 iOS 6.0 和 iOS 7.0 上运行良好,我们在标题 (UIView) 上设置了徽标 (UIImageView)。
升级到 SDK iOS7.1 后。以下停止工作,我完全不知道为什么。
// Header
header = [[UIView alloc] initWithFrame: CGRectMake(0, baseYPos, self.view.viewSize.width, 50)];
header.backgroundColor = [UIColor blackColor];
[self.view addSubview: header];
// LOGO
UIImageView *logo = [[UIImageView alloc] initWithFrame: CGRectMake(0, 0, header.viewSize.width, header.viewSize.height - 20)];
logo.image = [UIImage imageNamed: @"logo.png"];
logo.alpha = 1;
logo.contentMode = UIViewContentModeScaleAspectFit;
logo.center = ccp(header.center.x, header.center.y - baseYPos);
[header addSubview: logo];
使用revealapp.com。在 iOS7.0 中查看应用程序时,我将 UIImageView 视为标题上方的浮动徽标(Reveal 中的 3D 视图)。在iOS7.1查看同一个app,UIImageView基本上是一个没有图片的空白透明框。
我尝试了以下方法,但均无济于事:
- 用initWithImage声明UIImageView,稍后设置frame
- 将“logo”上的 opaque 强制设为 FALSE,将 header 设为 TRUE
- 我没有将“logo”作为子视图添加到“标题”,而是将其添加到两者的父视图中,并将其作为子视图插入到标题上方
这些都不起作用。看起来像苹果:
- 改变了我们在 UIImageView 中设置图像的方式
或
- 改变了我们将 UIImageView 添加到 UIView 父级的方式
或
- 我的编码方式完全错误
我找不到任何关于 7.1 的发行说明表明这是一个 SDK 更改 - 它也会导致糟糕的 SDK 设计 - "won't somebody please think of the children!"
这个问题让我很困惑,所以任何帮助都会得到永恒的感激(就像免费啤酒一样:D)。
谢谢大家!
【问题讨论】:
-
嗨!如果
[UIImage imageNamed:@"logo.png"]不是nil,您是否已签入调试器?如果您使用资产目录,可能需要删除图像名称中的扩展名(但这更像是一种假设) -
我还发现如果从项目文件夹将图像导入资产目录,则无需删除图像扩展名,因为创建的 .imageset 文件夹中的 contents.json 将具有文件名。换句话说,您可以灵活地仅使用名称(徽标)或带有/不带 @2x(logo.png 或 logo@2x.png)的全名来引用图像。
标签: objective-c uiview uiimageview ios7.1