2017-10-17 14 views
-1

상단에 탐색 모음이있는 UIViewController가 있습니다. 제목을 구분 된 컨트롤로 바꾸고 싶습니다.보기 컨트롤러의 탐색 모음에 세분화 된 컨트롤 추가

class AViewController: UIViewController 
{ 
    private var navigationbar = UINavigationBar(); 
    private var segment = UISegmentedControl(); 

    override func viewDidLoad() 
    { 
     super.viewDidLoad() 

     // Do any additional setup after loading the view. 

     buildThebar(); 
    } 

    func buildThebar() 
    { 
     navigationbar = UINavigationBar(frame: CGRect(x: 0, y: 0, width: self.view.bounds.width, height: 64)); 

     navigationbar.backgroundColor = UIColor(red: 200/255, green: 200/255, blue: 200/255, alpha: 1.0); 

     segment = UISegmentedControl(items: ["Testy", "Tests"]); 
     segment.sizeToFit(); 
     segment.tintColor = UIColor(red: 104/255, green: 90/255, blue: 132/255, alpha: 1.0); 

     let cancel = UIBarButtonItem(title: "Cancel", style: .plain, target: self, action: #selector(cancelbar(sender:))); 

     cancel.tintColor = UIColor(red: 104/255, green: 90/255, blue: 132/255, alpha: 1.0); 

     let title = UINavigationItem(title: "Testing"); 

     title.leftBarButtonItem = cancel; 

     navigationbar.setItems([title], animated: false); 

     self.navigationItem.titleView = segment; 
     // self.navigationItem.leftBarButtonItem = cancel; 

     self.view.addSubview(navigationbar); 
    } 
+0

무슨 문제입니까 ?? 코드는 나를 위해 잘 작동 –

+0

결과의 이미지를 게시 할 수 있습니까? 탐색 표시 줄이 나타 납니까? –

+0

@cdub : 게시 한 답변을 보시려면 –

답변

0

발견 된 문제.

놓친 내용은 생성 한 탐색 항목에 titleView을 설정하는 것입니다.

title.titleView = segment 

당신은 탐색 항목 self.navigationItem.titleView = segment;에 titleView를 추가하지만 당신은 당신이 당신의 탐색 모음에 전달되는 당신의 navigationItem로 설정해야합니다.

최종 코드

func buildThebar() 
{ 

    navigationbar = UINavigationBar(frame: CGRect(x: 0, y: 0, width: self.view.bounds.width, height: 64)); 

    navigationbar.backgroundColor = UIColor(red: 200/255, green: 200/255, blue: 200/255, alpha: 1.0); 

    segment = UISegmentedControl(items: ["Testy", "Tests"]); 
    segment.sizeToFit(); 
    segment.tintColor = UIColor(red: 104/255, green: 90/255, blue: 132/255, alpha: 1.0); 

    let cancel = UIBarButtonItem(title: "Cancel", style: .plain, target: self, action: nil); 

    cancel.tintColor = UIColor(red: 104/255, green: 90/255, blue: 132/255, alpha: 1.0); 

    let title = UINavigationItem(title: "Testing"); //better let title = UINavigationItem() 
    title.leftBarButtonItem = cancel; 
    title.titleView = segment 
    navigationbar.setItems([title], animated: false); 

    // self.navigationItem.leftBarButtonItem = cancel; 

    self.view.addSubview(navigationbar); 
} 

편집 : 당신이 탐색 모음 프레임을 설정하는 방법에 또 다른 문제가있다

. 나는 그게 당신이 원하지 않는 것을 믿을 enter image description here

같은 O/코드와 P가 보인다! 그 이유는 프레임이 y = 0에서 시작하기 때문입니다. 그러나 iPhone 및 iPads portait 모드에서는 다양한 조건 (일반적으로 사람의 하드 코드 또는 20이지만 iPhone으로 가정)에 따라 가변적 인 공간을 소모하는 상태 표시 줄이 있습니다 X 높이 상태 표시 줄은 전화 상태 표시 줄 높이가 변경되면 일반 iPhone에서도 다를 수 있습니다. View에 탐색 막대를 추가 할 때 항상 자동 레이아웃과 안전한 여백을 사용하는 것이 좋습니다. 당신이 정말 열심히 코드 프레임 싶다면

그런데 당신은 희망이 도움이

enter image description here

처럼

navigationbar = UINavigationBar(frame: CGRect(x: 0, y: 20, width: self.view.bounds.width, height: 44)); 

O는/P 보이는 사용할 수 있습니다.

0
let title = UINavigationItem() 
     title.titleView = segment 
     title.rightBarButtonItem = cancel 
navigationbar.setItems([title], animated: false); 
self.view.addSubview(navigationbar); 

작동중인 개체의 할당 순서에 관계없이.