2017-12-20 20 views
2

내가 도달하려는 목표로 디자인은 아래 이미지입니다. 다음 enter image description here탐색 막대의 그라디언트가 아래의보기와 다릅니다. <a href="https://i.stack.imgur.com/kbHjk.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/kbHjk.png" alt="enter image description here"></a></p> <p>나는 그라데이션을 만들고 계층에서 함수 이미지의 도움으로 탐색 모음으로 설정 아래의 코드를 사용 :

:

 //stackview 
    let gradientView = CAGradientLayer() 
    let cornerRadiusOfStackView : CGFloat! = 0 
    if #available(iOS 10.0, *) { 
     gradientView.colors = [Constants.Colors.violet.cgColor , Constants.Colors.green.cgColor ] 
    } 
    gradientView.startPoint = CGPoint(x: 0.0, y: 0.5) 
    gradientView.endPoint = CGPoint(x: 1.0, y: 0.5) 
    gradientView.frame = self.stackViewHoldingButtons.bounds 
    gradientView.cornerRadius = cornerRadiusOfStackView 
    self.stackViewHoldingButtons.layer.insertSublayer(gradientView, at: 0) 

결과는 다음이 디자인은 :

func image(fromLayer layer: CALayer) -> UIImage { 
    UIGraphicsBeginImageContext(layer.frame.size) 

    layer.render(in: UIGraphicsGetCurrentContext()!) 

    let outputImage = UIGraphicsGetImageFromCurrentImageContext() 

    UIGraphicsEndImageContext() 

    return outputImage! 
} 


    //navbar 
    let gradient = CAGradientLayer() 
    let cornerRadiusOfNavBar : CGFloat! = 0 
    if #available(iOS 10.0, *) { 
     gradient.colors = [Constants.Colors.violet.cgColor , Constants.Colors.green.cgColor ] 
    } 
    gradient.startPoint = CGPoint(x: 0.0, y: 0.5) 
    gradient.endPoint = CGPoint(x: 1.0, y: 0.5) 
    gradient.frame = self.navigationController!.navigationBar.bounds 
    gradient.cornerRadius = cornerRadiusOfNavBar 

    navigationItem.title = NSLocalizedString("Register", comment: "") 
    self.navigationController!.navigationBar.setBackgroundImage(self.image(fromLayer: gradient), for: .default) 

내가 탐색 메뉴 아래 스택보기가, 나 그것에 대한 기울기를 설정하는 코드를 사용 이 두 줄의 코드를 추가하여 탐색 바 아래쪽 테두리를 제거했습니다.

self.navigationController!.navigationBar.setBackgroundImage(UIImage(), for: .default) 
    self.navigationController?.navigationBar.shadowImage = UIImage() 
다음과 같이

결과는 다음과 같습니다

enter image description here

어느 한 날 그라데이션이 균일하게하는 데 도움이 될 수 있습니다 ??

P. : - navigationBar.isTranslucent 속성이 false로 설정되어 있는지, 두 경우 모두 sRGB로 설정되어 있는지, 그래디언트를 설정하기 전과 후에 모두 테두리를 제거하는 선을 호출했는지 확인했습니다.

미리 감사드립니다.

+1

가장 간단한 방법은 바로 뷰 요소 배경 지우기을 한 다음 모든 뒤에보기를 넣을 수 AppDelegate에이 값을 것입니다 설정하려면

self.navigationController!.navigationBar.backgroundColor = UIColor.clear self.navigationController!.navigationBar.setBackgroundImage(UIImage(), for: .default) self.navigationController?.navigationBar.shadowImage = UIImage() self.navigationController?.navigationBar.isOpaque = false self.navigationController?.navigationBar.isTranslucent = true 

그라데이션으로. –

+0

덕분에 @AllenR, 이미 모든 장면에서이 방법을 구현했으며 시간을 변경해야하는 번거 로움이 있습니다. – MhmdRizk

답변

0

탐색 막대를 완전히 투명하게 만들어보기의 그래디언트 레이어가 표시되도록하십시오. 당신이 응용 프로그램이 많다는

UINavigationBar.appearance().backgroundColor = UIColor.clear 
UINavigationBar.appearance().setBackgroundImage(UIImage(), for: .default) 
UINavigationBar.appearance().shadowImage = UIImage() 
UINavigationBar.appearance().isOpaque = false 
UINavigationBar.appearance().isTranslucent = true