iOS 10-如何创建自定义导航栏大标题

时间:2019-06-19 05:09:00

标签: ios swift uinavigationbar ios10 large-title

我的应用程序部署目标版本是iOS10。我在应用程序中添加了导航栏大标题。它可以根据以上iOS 10的需要运行。如果我尝试在iOS 10中进行测试,则无法正常工作。因此,我也尝试为iOS 10创建自定义导航栏大图块。但我不知道如何实现这一目标。请指导我。谢谢前进

    if #available(iOS 11.0, *) {
         navigationController?.navigationBar.prefersLargeTitles = true
    } else { 
         // need to add here as well
    }

3 个答案:

答案 0 :(得分:0)

NavigationBar 有一个 titleView 对象,title所在的位置。您可以自定义label到那里去,并制作navigationBar.titleView = yourLabel或自定义 UIView

答案 1 :(得分:0)

您可以在导航栏的标题视图中添加视图。您也可以将图像添加到导航栏。 请参考以下链接:-

https://medium.com/@matschmidy/swift-custom-navigation-bar-image-for-ios-11-large-titles-8a176d9cbaed

答案 2 :(得分:0)

万一有人需要这个。这是我如何做到的。对我来说,这比默认的要好,因为它支持您对大标题(例如多行)可能想要的任何自定义

就我而言,我的布局如下所示。您可以随心所欲,但请确保标题不在表格视图/滚动视图内。

查看

  • 查看
    • 大标题标签
    • 视图(此视图将显示在顶部)
  • 查看
    • 表格视图
    • 查看
  • 查看

在这种情况下,我有 scrollViewDidScroll 委托,它检查 scrollView 内容偏移以更改 titleLabels 顶部约束。对我来说,最高限制是 16。将其更改为您想要的任何内容

<块引用>
 extension YourViewController: UITableViewDelegate {
    public func scrollViewDidScroll(_ scrollView: UIScrollView) {
        let titleHeight = titleLabel.bounds.height
        if (scrollView.contentOffset.y <= 0) {
            // Title is fully visible - table view is at the top
            titleLabelTopConstraint.constant = 16
            isLargeTitleHidden = false
        } else if (scrollView.contentOffset.y > (titleHeight + 16)){
            // Title is not visible at all. Table view is at an unknown position but it is not top
            titleLabelTopConstraint.constant = -titleHeight
            isLargeTitleHidden = true
        } else {
            // Title is kind of visible. Not fully hidden or shown.
            titleLabelTopConstraint.constant = -scrollView.contentOffset.y + 16
            isLargeTitleHidden = false
        }
    } }

我也有 isLargeTitleHidden 来更新导航

<块引用>
var isLargeTitleHidden: Bool = false {
    didSet{
        if (oldValue != isLargeTitleHidden){
            updateNavBar()
        }
    }
}
func updateNavBar(){
    let fadeTextAnimation = CATransition()
    fadeTextAnimation.duration = 0.2
    fadeTextAnimation.type = CATransitionType.fade

    navigationController?.navigationBar.layer.add(fadeTextAnimation, forKey: "fadeText")
    
    if isLargeTitleHidden {
        navigationItem.title = titleLabel.text
    } else {
        navigationItem.title = ""
    }
}