自定义tabview标题栏

问题描述

我想在顶部的选项卡视图中显示每个视图的标题,并使文本保持左对齐,当前,当我在情节提要中切换顶部标题栏时,我会得到以下信息:

storyboard view titlebar

但是当我运行我的应用程序时,标题不是这样显示的,当应用程序运行时该如何显示呢?

更新1:

我可以通过将tabview控制器嵌入Navigationview控制器中来显示标题栏。现在,我唯一的问题是将标题的对齐方式设置为左对齐。

解决方法

尝试一下:

navigationItem.largeTitleDisplayMode = .always
navigationController?.navigationBar.prefersLargeTitles = true
,

我为UINavigationItem写了一个自定义扩展名,将标题设置为左对齐:

extension UINavigationItem {
    
    // MARK: Use this Method for setting up title for Any Controller *ALWAYS*
    public func setTitle(_ title: String,leftInset: CGFloat = -5) {
        let label = UILabel()
        label.text = title
        label.textAlignment = .left
        let customView = UIView()
        customView.translatesAutoresizingMaskIntoConstraints = false
        label.translatesAutoresizingMaskIntoConstraints = false
        customView.backgroundColor = .clear
        label.textAlignment = .left
        customView.frame = CGRect(x: 0,y: 0,width: UIScreen.main.bounds.width,height: 0)

        if #available(iOS 12,*) {
            label.frame.origin = CGPoint(x: leftInset + 3,y: -13)
        } else {
            label.frame.origin = CGPoint(x: leftInset,y: -13)
        }
        customView.addSubview(label)
        customView.layoutIfNeeded()
        customView.sizeToFit()
        label.layoutIfNeeded()
        label.sizeToFit()
        customView.translatesAutoresizingMaskIntoConstraints = true
        label.translatesAutoresizingMaskIntoConstraints = true
        titleView = customView
    }
}

在选项卡视图中使用的每个UIViewController中添加它:

override func viewWillAppear(_ animated: Bool) {
        tabBarController?.navigationItem.setTitle("Sample",leftInset: 12)
    }

必须将tabviewcontroller嵌入到navigationviewcontroller内,才能正常工作。