5

我正在尝试设计具有多行居中大标题文本的视图控制器,就像苹果的 Ask Siri(Settings->General->Keyboards->About Ask Siri, Dictation and Privacy...)一样。

设置->通用->键盘->关于询问 Siri 滚动时

我可以使用以下方法实现居中文本:

let paragraph = NSMutableParagraphStyle()
paragraph.alignment = .center
navigationController?.navigationBar.largeTitleTextAttributes = [.paragraphStyle: paragraph]

我确实从情节提要中设置了导航标题并尝试了这些以实现多行大标题:

但它们都不适用于 iOS 13。

4

2 回答 2

2

您可以通过向您的滚动视图添加多行标签来实现此目的,然后scrollViewDidScroll根据垂直滚动视图偏移量在滚动视图的委托方法中显示/隐藏您的导航项标题。

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    if scrollView.contentOffset.y > myLabelHeight && navigationItem.title == "" {
        setTitle(hidden: false)
    } else if scrollView.contentOffset.y <= myLabelHeight && navigationItem.title == "MyTitleString" {
        setTitle(hidden: true)
    }
}

我添加了一个图层过渡来实现淡入淡出效果。

func setTitle(hidden: Bool) {
    let animation = CATransition()
    animation.duration = 0.25
    animation.type = .fade

    navigationController?.navigationBar.layer.add(animation, forKey: "fadeText")

    if hidden {
        navigationItem.title = ""
    } else {
        navigationItem.title = "MyTitleString"
    }
}

不要忘记将导航项标题设置为viewDidLoad.

于 2020-06-26T14:01:19.377 回答
-2

没有任何此类属性可以设置并title成为多行。你需要操纵它。

这是一个如何创建多行导航栏标题的代码示例:

label.backgroundColor = .clear
label.numberOfLines = 2
label.font = UIFont.boldSystemFont(ofSize: 16.0)
label.textAlignment = .center
label.textColor = .white
label.text = "This is a\nmultiline string for the navBar"
self.navigationItem.titleView = label```
于 2020-06-26T13:40:53.647 回答