2017-10-17 18 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); 
} 

EDIT:あなたはナビゲーションバーの枠を設定する方法と、別の問題があり

。私はあなたが望むものではないthatsの信じる

のようなO /あなたのコードとPが見えます!あなたのフレームが y = 0から始まりますが、iPhoneとiPadsのポートレートモードでは、さまざまな条件に基づいて可変量のスペースを消費するステータスバーがあります(通常、人々のハードコードまたは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); 

操作中のオブジェクトの割り当ての順番だけです。

関連する問題