自定义tabview标题栏

Posted

技术标签:

【中文标题】自定义tabview标题栏【英文标题】:Customize tabview titlebar 【发布时间】:2020-11-11 08:50:59 【问题描述】:

我想在顶部的 tabview 中显示我的每个视图的标题,文本左对齐,目前当我在故事板中切换顶部标题栏时,我得到如下内容:

但是当我运行我的应用程序时,标题没有这样显示,我如何在应用程序运行时显示这个??

更新 1:

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

【问题讨论】:

【参考方案1】:

试试这个:

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

【讨论】:

它仍然不显示标题。【参考方案2】:

我为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 中才能工作。

【讨论】:

以上是关于自定义tabview标题栏的主要内容,如果未能解决你的问题,请参考以下文章

标题栏自定义,文件名显示

ActionBarSherlock - 带有分隔线的操作栏自定义背景

iPad导航栏自定义高度

如何减少iOS导航栏自定义视图的左右间隙

IOS/Objective-C:导航栏自定义Segue效果对比Show Segue

自定义tabview标题栏