4

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

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

3 回答 3

2

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

就我而言,我的布局看起来像这样。你可以随心所欲,但要确保标题不在表格视图/滚动视图内。

看法

  • 看法
    • 大标题标签
    • 视图(此视图将位于顶部)
  • 看法
    • 表视图
    • 看法
  • 看法

在这种情况下,我有 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 = ""
    }
}
于 2021-05-25T05:50:27.600 回答
0

NavigationBar有一个titleView对象title。你可以自定义一个label去那里,但是你想要和制作navigationBar.titleView = yourLabel或制作一个自定义UIView都是一样的。

于 2019-06-19T05:28:13.270 回答
0

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

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

于 2019-06-19T05:35:54.447 回答