【问题标题】:How to add a segmented control to a navigation bar ? (iOS)如何将分段控件添加到导航栏? (iOS)
【发布时间】:2018-04-10 02:32:58
【问题描述】:

我想向这样的导航栏添加分段控件

但是当我将分段控件拖到导航栏时,大标题消失了。怎样才能创建上面的UI?

【问题讨论】:

    标签: ios swift xcode user-interface navigationbar


    【解决方案1】:

    您应该将分段控件添加为导航栏的titleView。 下面是示例代码:

    let titles = ["All", "Missed"]
    segmentControl = UISegmentedControl(items: titles)
    segmentControl.tintColor = UIColor.white
    segmentControl.backgroundColor = UIColor.blue
    segmentControl.selectedSegmentIndex = 0
    for index in 0...titles.count-1 {
        segmentControl.setWidth(120, forSegmentAt: index)
    }
    segmentControl.sizeToFit()
    segmentControl.addTarget(self, action: #selector(segmentChanged), for: .valueChanged)
    segmentControl.selectedSegmentIndex = 0
    segmentControl.sendActions(for: .valueChanged)
    navigationItem.titleView = segmentControl
    

    【讨论】:

    • 它对我有用,谢谢。您知道不需要以编程方式添加 SegmentedControl 的解决方案吗?
    【解决方案2】:

    你可以试试下面的简单代码,

    var segmentedController: UISegmentedControl!
    
    let items = ["Label A", "Label B"]
    segmentedController = UISegmentedControl(items: items)
    navigationItem.titleView = segmentedController
    navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Edit", style: .plain, target: self, action: #selector(handleSignOut))
    navigationItem.rightBarButtonItem?.tintColor = UIColor.black
    

    【讨论】:

      【解决方案3】:

      如果您想使用 XIB 添加 UISegmentControl,那么您可以通过以下简单步骤来实现:

      1. 在 XIB 中设计您的自定义视图(请参阅 XIB 以供参考 https://i.stack.imgur.com/AJDCo.png
      2. 把代码放到你的 ViewController 中

        class ViewController: UIViewController {
        
            lazy var navSegmentedView: YourCustomView = {
                guard let aView = Bundle.main.loadNibNamed("\(YourCustomView.self)", owner: self, options: nil)?.first as? YourCustomView else { return YourCustomView() }
        
                aView.backgroundColor = .clear
                aView.frame = CGRect(x: 0, y: 0, width: 160, height: 40)
                aView.segmentControl.addTarget(self, action: #selector(segmentChanged(_:)), for: .valueChanged)
        
                return aView
            }()
        
            override func viewDidLoad() {
                super.viewDidLoad()
                setupNavBar()
            }
        
            func setupNavBar() {
                navigationItem.titleView = navSegmentedView
                navigationItem.titleView?.backgroundColor = .clear
            }
        
            @objc func segmentChanged(_ sender: UISegmentedControl) {
                print(sender.selectedSegmentIndex)
            }
        
         }
        

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多