iOS7 忽略 UIImageView 的 backgroundColor?
Posted
技术标签:
【中文标题】iOS7 忽略 UIImageView 的 backgroundColor?【英文标题】:backgroundColor of UIImageView is ignored on iOS7? 【发布时间】:2013-09-26 20:00:26 【问题描述】:在 ios7 之前,这样的代码在 UIImageView 的子类上运行良好。 但不再工作了。
-(id) initWithFrame:(CGRect) frame
self = [super initWithFrame:frame];
if(self)
self.backgroundColor = [UIColor redColor];
return self;
我还在 InterfaceBuilder 上检查了这一点。 再一次,UIImageView 的 backgroundColor 的值不会改变任何东西... 所有这些都适用于 UIView... 那么,它的 UIImageView 怎么了?不还是 UIView 的子类吗? 还是从 iOS7 禁用此属性? 或者是否有任何我必须设置的新属性才能使其正常工作?
可能这段代码更好地描述了这个问题:
UIImageView *imageView =[ [UIImageView alloc] initWithImage:[UIImage imageNamed:@"ImageName.png"];
imageView.backgroundColor = [UIColor redColor];
更改 backgroundColor 的值在它没有 image 属性时有效。 但后来它不再是 backgroundColor...
【问题讨论】:
你是如何创建图像视图的?它的大小是多少,图像的大小是多少?您使用的是什么内容模式? imageView的frameSize和imageSize都是35x35。我没有将 contentMode 设置为应用其默认值 (UIViewContentModeScaleToFill)。为了创建 UIImageView 的子类,它实际上调用了 initWithFrame: 虽然它有点自定义设置两个附加值。 (initWithFrame:commandTag:mainController:) 因为我用这个作为按钮,所以颜色是之后设置的,而不是在 initWithFrame 中。 那么如果图片和视图大小一样,你希望什么时候可以看到背景色? 对不起,我不知道我是否明白你的意思,但是通过图像应该可以看到背景颜色的变化。直到 iOS6 为止,它都是这样工作的。 所以图像是部分透明的?你试过不加图片吗? 【参考方案1】:如果您的 UIImageView 来自 .xib/.storyboard,则将调用 initWithCoder:
而不是 initWithFrame:
。作为一个例子,我把这个小的 UIImageView 子类放在一起,然后将一个带有居中内容的 TestImageView 放在故事板内的视图控制器的视图中。 TestImageView 的背景颜色在情节提要中设置为红色。
@implementation TestImageView
- (id)initWithFrame:(CGRect)frame
self = [super initWithFrame:frame];
if (self)
self.backgroundColor = [UIColor blueColor];
return self;
- (id)initWithCoder:(NSCoder *)aDecoder
self = [super initWithCoder:aDecoder];
if (self)
self.backgroundColor = [UIColor greenColor];
return self;
- (void)setBackgroundColor:(UIColor *)backgroundColor
NSLog(@"setting background color to %@", backgroundColor);
[super setBackgroundColor:backgroundColor];
@end
运行应用程序创建了这个输出:
setting background color to UIDeviceRGBColorSpace 1 0 0 1
setting background color to UIDeviceRGBColorSpace 0 1 0 1
这在屏幕上:
如您所见,setBackgroundColor 首先是使用故事板中的红色调用的(这发生在[super initWithCoder:aDecoder]
),然后使用 initWithCoder 中的绿色调用。
【讨论】:
哇!非常感谢你。但我不使用情节提要,没有界面构建器,但一切都是由代码制作的。无论如何,backgroundColor 是否仍然适用于 iOS7?在 iOS7 和 XCode5 之前,我所做的一切都很好。 嗨,格雷格,我还有一个问题。当您更改背景颜色时,是否也可以通过图像看到这种变化?我相信在 iOS7 之前这是可能的。我的应用实际上就是这样工作的。 是的,背景颜色通过图像视图中图像的透明部分显示。我更新了我的应用程序中的图像,使其中心有一个透明区域,并更新了屏幕截图以显示它的外观。 感谢您的更新。是否可以在中间更改图像的 alpha 值?现在它是背景或图像,但你可以混合吗?我告诉你目的。我将 UIImageView 用作按钮并将背景颜色更改为开/关。这就是为什么我需要通过图像看到颜色的变化。 是的,我创建了一个不透明度为 50% 的新 png,绿色背景与图像视图中的 png 混合。 (我没有费心将新图片上传到答案。)【参考方案2】:只是为了更新。 正如 Wain 和 Greg 建议的那样,改变图像本身的不透明度解决了问题。 只是不知道为什么在 iOS7 之前没关系,但在 iOS7 之后很重要 我仍然想知道这可能只是 iOS7 本身的问题。无论如何,虽然我有近 200 张图片要处理,但最好开始修改它们,而不是等待 Apple 的答复。 谢谢你的帮助!
【讨论】:
以上是关于iOS7 忽略 UIImageView 的 backgroundColor?的主要内容,如果未能解决你的问题,请参考以下文章
IOS7:Pop ViewController 强制 UIImageView 掉落
iOS7 Autolayout 和 UIImageview 超大
iOS7 自动布局与 Tabbar 结合 UIScrollView 和可缩放 UIImageView 不起作用
iOS7 上 UICollectionViewCell 中的 UIImageView 自动布局问题,但在 iOS8 上没问题
UIImageView 设置为 imageWithData 忽略 contentMode
ModalViewController 中的 UIImageView 正在忽略 ContentMode - iPhone