UISegmentedControl setImage:在iOS7中的错误 [英] UISegmentedControl setImage: Bug in iOS7

查看:194
本文介绍了UISegmentedControl setImage:在iOS7中的错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个UISegmentedControl在我的应用程序。从iOS7 GM,我使用的图像在iOS7设备上运行时不显示。任何人有此问题吗?



以下是iOS6.1及更早版本中的样子。



这里是在iOS7中的外观。



以下是代码:

  self.theSegmentedControl.frame = CGRectMake(self.theSegmentedControl.frame.origin.x,self.theSegmentedControl.frame.origin.y,320,35) ; 
[self.theSegmentedControl setBackgroundImage:[UIImage imageNamed:@img_toggleInactive] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[self.theSegmentedControl setImage:[UIImage imageNamed:@btn_onceActive] forSegmentAtIndex:0];
[self.theSegmentedControl setImage:[UIImage imageNamed:@btn_recurringInactive] forSegmentAtIndex:1];
[self.theSegmentedControl setImage:[UIImage imageNamed:@btn_scheduledInactive] forSegmentAtIndex:2];
[self.theSegmentedControl setDividerImage:[UIImage imageNamed:@separator] forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault];有没有人找到一个解决方法?


< h2_lin>解决方案

Woohoo!这里的解决方法:

  //添加清除颜色以掩盖选择状态的任何位,对象可能在图像周围显示
self.theSegmentedControl.tintColor = [UIColor clearColor];

UIImage * onceActive;
UIImage * recurringActive;
UIImage * scheduledActive;
UIImage * separator;

//设置imageWithRenderingMode:到imageWithRenderingMode:iOS7的UIImageRenderingModeAlwaysOriginal是关键
if([UIImage instancesRespondToSelector:@selector(imageWithRenderingMode :)]){
onceActive = [[UIImage imageNamed :@btn_onceActive] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
recurringActive = [[UIImage imageNamed:@btn_recurringInactive] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
scheduledActive = [[UIImage imageNamed:@btn_scheduledInactive] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
separator = [[UIImage imageNamed:@separator] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

}
else {
onceActive = [UIImage imageNamed:@btn_onceActive];
recurringActive = [UIImage imageNamed:@btn_recurringInactive];
scheduledActive = [UIImage imageNamed:@btn_scheduledInactive];
separator = [UIImage imageNamed:@separator];
}


[self.theSegmentedControl setImage:onceActive forSegmentAtIndex:0];
[self.theSegmentedControl setImage:recurringActive forSegmentAtIndex:1];
[self.theSegmentedControl setImage:scheduledActive forSegmentAtIndex:2];
[self.theSegmentedControl setDividerImage:separator forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault];


I have a UISegmentedControl in my app. As of iOS7 GM, the images I use are not showing up when run on iOS7 devices. Anyone else having this problem?

Here's what it looks like in iOS6.1 and earlier.

and here is what it looks like in iOS7.

Here is the code:

self.theSegmentedControl.frame = CGRectMake(self.theSegmentedControl.frame.origin.x, self.theSegmentedControl.frame.origin.y, 320, 35);
[self.theSegmentedControl setBackgroundImage:[UIImage imageNamed:@"img_toggleInactive"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[self.theSegmentedControl setImage:[UIImage imageNamed:@"btn_onceActive"] forSegmentAtIndex:0];
[self.theSegmentedControl setImage:[UIImage imageNamed:@"btn_recurringInactive"] forSegmentAtIndex:1];
[self.theSegmentedControl setImage:[UIImage imageNamed:@"btn_scheduledInactive"] forSegmentAtIndex:2];
[self.theSegmentedControl setDividerImage:[UIImage imageNamed:@"separator"] forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

Has anyone found a workaround to this?

解决方案

Woohoo! Here's the workaround:

//Add clear color to mask any bits of a selection state that the object might show around the images
self.theSegmentedControl.tintColor = [UIColor clearColor];

UIImage *onceActive;
UIImage *recurringActive;
UIImage *scheduledActive;
UIImage *separator;

//Setting imageWithRenderingMode: to imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal for iOS7 is key
if ([UIImage instancesRespondToSelector:@selector(imageWithRenderingMode:)]) {
    onceActive = [[UIImage imageNamed:@"btn_onceActive"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    recurringActive = [[UIImage imageNamed:@"btn_recurringInactive"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    scheduledActive = [[UIImage imageNamed:@"btn_scheduledInactive"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    separator = [[UIImage imageNamed:@"separator"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

}
else {
    onceActive = [UIImage imageNamed:@"btn_onceActive"];
    recurringActive = [UIImage imageNamed:@"btn_recurringInactive"];
    scheduledActive = [UIImage imageNamed:@"btn_scheduledInactive"];
    separator = [UIImage imageNamed:@"separator"];
}


[self.theSegmentedControl setImage:onceActive forSegmentAtIndex:0];
[self.theSegmentedControl setImage:recurringActive forSegmentAtIndex:1];
[self.theSegmentedControl setImage:scheduledActive forSegmentAtIndex:2];
[self.theSegmentedControl setDividerImage:separator forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

这篇关于UISegmentedControl setImage:在iOS7中的错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆