自iOS6以来按钮背景和渐变变化

时间:2012-09-24 12:04:58

标签: iphone uibutton ios6 cagradientlayer

对于某个应用,我必须创建一个填充了渐变和背景图像的UIButton。一切正常,直到我将操作系统从iOS 5.1升级到最近发布的iOS 6。

以下是模拟器的两个截图:

screenshot with iOS 5.1

Screnshot with iO 6

嗯,第一个屏幕截图显示了我需要(并且做了),你可以看到棕色背景和灰色辐射。

下面是带有相同按钮但运行iOS 6的屏幕截图。如你所见,渐变消失了,UIButton底部出现了一条奇怪的白条。

我看过这是一个错误还是什么,但我什么都没找到,也许这里有人遇到过同样的问题?这是我的渐变代码

CAGradientLayer *gradient = [CAGradientLayer layer];
    gradient.frame = btnCountry.bounds;
    UIColor *colorTop = [UIColor colorWithRed:.992f green:.992f blue:.992f alpha:1];
    UIColor *colorBot = [UIColor colorWithRed:.788f green:.769f blue:.745f alpha:1];
    gradient.colors = [NSArray arrayWithObjects:(id)[colorTop CGColor], (id)[colorBot CGColor], nil];
    gradient.borderColor = [UIColor colorWithRed:.545f green:.506f blue:.459f alpha:1].CGColor;
    gradient.borderWidth = 1;

    gradient.masksToBounds = YES;
    gradient.cornerRadius = 11;
    [[btnCountry layer] insertSublayer:gradient atIndex:0];

3 个答案:

答案 0 :(得分:11)

在ios6中这是一个非常奇怪的问题,我在设置渐变时遇到了同样的问题:

[myButton.layer insertSublayer:gradient atIndex:0];

所以我尝试将底线更改为在iOS 6以及IOS的较低版本中完美运行

[myButton.layer insertSublayer:gradient below:myButton.titleLabel.layer];

希望这会有所帮助

答案 1 :(得分:7)

正如您在评论中看到的那样,问题来自班级UIGroupTableViewCellBackground,我只是将其隐藏起来。我认为这不是一个“干净”的解决方案,如果你有一个更好的解决方案,我将很高兴听到它: - )

以下是代码:

for(UIView* subView in btnCountry.subviews)
    if([subView isKindOfClass:NSClassFromString(@"UIGroupTableViewCellBackground")])
        [subView setHidden:YES];

答案 2 :(得分:2)

在索引位置1插入图层对我有用。

可能最好的解决方案是检查iOS版本,并根据该版本插入索引0或1。