不同的iOS 8版本是否以不同方式绘制UIButton?

时间:2015-08-13 13:55:46

标签: ios objective-c ios-autolayout

我已经创建了一个应用程序,其部署目标是iOS 8.0或更高版本,仅适用于iPhone。

我从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及以上版本)可能会绘制不同的用户界面吗?或者提供一个解决方案,当我将按钮子类化并在实现自动布局后初始化具有正确宽度*的按钮时,我不必执行解决方法。

2 个答案:

答案 0 :(得分:0)

您可以按照以下步骤调整渐变的大小:

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

这样,渐变将始终与按钮一样大。

答案 1 :(得分:0)

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