如何在导航栏中添加分段控件?(iOS)

8
我想在导航栏中添加一个分段控制器,如下图所示:enter image description here 但是当我将分段控制器拖到导航栏时,大标题会消失。如何创建上述UI?
3个回答

12

你应该将分段控制器作为导航栏的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的解决方案吗? - Adelino

3
您可以尝试以下简单代码:
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

2

如果您想通过使用XIB添加UISegmentControl,则可以按照以下简单步骤操作:

  1. Design your custom view in XIB (Refer XIB for your reference https://istack.dev59.com/AJDCo.webp)
  2. Put the code in your 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)
        }
    
     }
    

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接