2015-08-13 67 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邊界

相關問題