2015-08-13 36 views
0

我制作了一个应用程序,其部署目标是iOS 8.0或更高版本,仅适用于iPhone。不同的iOS 8版本以不同的方式绘制UIButton吗?

我从XIB子类的按钮和在的initWithCoder实施梯度在其上这样的:

[self setTitleColor:[UIColor colorWithRed:51.0/255.0 green:51.0/255.0 blue:51.0/255.0 alpha:1] forState:UIControlStateHighlighted & UIControlStateNormal & UIControlStateSelected]; 

    self.layer.shadowColor = [UIColor colorWithRed:140.0/255.0 green:140.0/255.0 blue:140.0/255.0 alpha:1].CGColor; 
    self.layer.shadowOffset = CGSizeMake(0, 2.5); 
    self.layer.shadowOpacity = 1.0; 
    self.layer.shadowRadius = 0.0; 
    self.layer.cornerRadius = 3.5; 
    [self normalGradient]; 

普通梯度:

- (void)normalGradient{ 
    CAGradientLayer *gradientLayer = [RBCGradientLayer normalBackground]; 
    gradientLayer.frame = self.layer.bounds; 
    gradientLayer.cornerRadius = self.layer.cornerRadius; 
    [self.layer insertSublayer:gradientLayer atIndex:0]; 
} 

现在因为存在具有不同的宽度,gradientLayer一个按钮.frame = self.layer.bounds由于自动布局初始化时无法正常工作(或者我可能是错的?)。所以,我在做一个的initWithCoder解决方法:

if (self.tag == 3){ 
self.layer.frame = CGRectMake(self.bounds.origin.x, self.bounds.origin.y, 218, 36); 
} else { 
self.layer.frame = self.bounds; 
} 

虽然这锻炼周围不干净,就可以完成任务,并适用于所有的模拟器。但是,当我在不同的设备上测试它时,有些宽度将不正确(XIB中设置的宽度),而不是上面实现的代码。我怀疑这个问题与自动布局以及iOS版本有关。

任何人都可以指出为什么不同版本的iOS(8和以上)可能会绘制不同的用户界面?或者提供一个解决方案,我不需要在我的按钮子类化时执行解决方法,并且在实现自动布局后以正确的宽度*初始化按钮。

回答

0

您可以调整渐变如下:

- (void)layoutSubviews 
{ 
    [super layoutSubviews]; 
    //Update the frame of your layer too match your frame 
} 

这样的梯度永远是一样大的按钮。

0

对于layoutSubviews方法,您必须更改gradientLayer边界

相关问题