2016-08-31 3 views
1

색이있는 배경이 약간있는 UILabels이고 아래에 CAGradientLayers을 추가했습니다.iPhone 6에서 CAGradientLayer가 잘못 표시되었습니다.

아이폰 4와 완벽 보이는 아이폰 5S에
CAGradientLayer * gradientLayer = [CAGradientLayer layer]; 
gradientLayer.colors = [NSArray arrayWithObjects: 
         (id) [UIColor colorWithWhite:1 alpha:0.3].CGColor, 
         (id) [UIColor colorWithWhite:0.5 alpha:0.3].CGColor, nil]; 
gradientLayer.frame = label.bounds; 
gradientLayer.cornerRadius = label.layer.cornerRadius; 
[label.layer insertSublayer:gradientLayer atIndex:0]; 

하지만이 아이폰에 CAGradientLayers 6S 수평 아래 스크린 샷과 같이 잘못된다.

enter image description here

이 문제뿐만 아니라 UIButtons에 대해 발생합니다.

iOS 9.3을 실행 중입니다.

+0

어디에서 볼 때 컨트롤러 수명주기에 해당 코드가 배치됩니까? – beyowulf

+1

레이블 '및 버튼'프레임이 변경되면 그라디언트 레이어도 함께 변경해야합니다. 예를 들어 레이블이 자동 레이아웃으로 배치되어 있고보기가 회전 된 경우 그래디언트의 프레임을 업데이트해야합니다. 뷰 컨트롤러의'viewDidLayoutSubviews'에서 이것을 할 수 있고 그라디언트로 레이블/버튼을 서브 클래스 화하고'layoutSubviews'에서 그래디언트 프레임을 업데이트 할 수 있습니다. – keithbhunter

+0

@beyowulf 코드는 viewDidLoad 메서드에 있습니다. –

답변

1

필요한 것은 자동 레이아웃 제약 조건입니다. 이 신속한 코드는 viewDidLayoutSubviews 메서드에서 수행해야하는 작업을 나타냅니다.

class ViewController: UIViewController { 

    @IBOutlet weak var button: UIButton! 
    let gradientLayer = CAGradientLayer() 

    override func viewDidLoad() { 
     super.viewDidLoad() 


     gradientLayer.colors = [UIColor(white: 1, alpha: 0.3).CGColor, 
           UIColor(white: 0.5, alpha: 0.3).CGColor] 
     gradientLayer.frame = button.bounds 
     gradientLayer.cornerRadius = button.layer.cornerRadius 
     button.layer.insertSublayer(gradientLayer, atIndex: 0) 
    } 

    override func viewDidLayoutSubviews() { 
     super.viewDidLayoutSubviews() 

     gradientLayer.frame = button.bounds 
    } 

} 
+0

버튼에 gradientLayer를 추가하지 않아도됩니까? –

+0

죄송합니다, 당신은 :) 내 대답을 편집 않았다 – Klevison

관련 문제