2017-10-17 186 views
-1

我有顶部导航栏一个UIViewController。我想用分段控件替换标题。添加segmentedcontrol到导航栏在一个视图控制器

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 

你加入titleview的导航项目self.navigationItem.titleView = segment;但你需要将其设置为你的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); 
} 

编辑:

有一个与你是如何设置导航栏架的另一个问题。 O /你的代码为P看起来像

我相信那不是你想要的!为什么它看起来像的原因是因为你的框架从y = 0启动,但在iPhone和iPad波泰特模式有基于各种条件消耗的空间变化量在顶部的状态栏(通常人们硬编码或承担它是20,但iPhone X高度状态栏可能会有所不同,甚至在正常iPhone中,当您收到呼叫状态栏高度更改时)。它总是更好地使用自动布局和安全边距来添加导航栏到视图。

但如果你真的想硬编码的帧,那么你可以使用

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

O/P样子

enter image description here

希望它能帮助。

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

只是在操作中的对象分配顺序的问题。

相关问题