xcode 多行导航栏标题

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/34298383/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-15 08:19:42  来源:igfitidea点击:

Multiline Navigationbar Title

iosswiftxcodeuinavigationbarswift3

提问by Cody Harness

I am trying to set the title label in my navigation bar to allow multiple lines. I have custom navigation controller code that I am placing the multiline code into. I know that the code already there works, but my multiline part is not working.

我试图在我的导航栏中设置标题标签以允许多行。我有自定义导航控制器代码,我将多行代码放入其中。我知道那里的代码有效,但我的多行部分无效。

let titleLabel = UILabel()
titleLabel.frame = CGRectMake(0, 0, self.navigationBar.frame.width, self.navigationBar.frame.height * 2)
titleLabel.numberOfLines = 0
titleLabel.lineBreakMode = .ByWordWrapping

navigationItem.titleView = titleLabel

But the text still runs off at the end. I've also tried putting this into the individual view controller itself, adding self.navigationController?.in front of navigationItemwith the same results.

但文字最后还是跑掉了。我也试过把它放到单独的视图控制器本身中,self.navigationController?.在前面添加navigationItem相同的结果。

Is there something I'm missing in my code that would keep the title label from using multiple lines?

我的代码中是否缺少某些内容可以防止标题标签使用多行?

回答by Rashwan L

Here is a code example of how you can create a multiline navigationBar title

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

let label: UILabel = UILabel(frame: CGRectMake(0, 0, 400, 50))
label.backgroundColor = UIColor.clearColor()
label.numberOfLines = 2
label.font = UIFont.boldSystemFontOfSize(16.0)
label.textAlignment = .Center
label.textColor = UIColor.whiteColor()
label.text = "This is a\nmultiline string for the navBar"
self.navigationItem.titleView = label

Swift 5.x:

斯威夫特 5.x:

let label = UILabel()
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

回答by foson

This is doable in a storyboard. Just drag a UIView into the Navigation bar, then drag a UILabel onto it in the document outline, set lines to 2 and alignment to center.

这在故事板中是可行的。只需将一个 UIView 拖到导航栏中,然后在文档大纲中将一个 UILabel 拖到它上面,将行设置为 2 并将对齐设置为居中。

enter image description here

在此处输入图片说明

回答by ZiEiTiA

Use this to get the label position exactly as you want it:

使用它可以完全按照您的需要获取标签位置:

let labelWidth = navBar.bounds.width - 110

    let label = UILabel(frame: CGRect(x:(navBar.bounds.width/2) - (labelWidth/2), y:0, width:labelWidth, height:navBar.bounds.height))
    label.backgroundColor = UIColor.clear
    label.numberOfLines = 0
    label.font = UIFont.boldSystemFont(ofSize: 13.0)
    label.textAlignment = .center
    label.textColor = UIColor.black
    label.lineBreakMode = .byWordWrapping

    label.text = loadedName
    navBar.topItem?.title = nil
    navBar.addSubview(label)

the 110 value in the top line is the spacing you want either side of the label.

顶行中的 110 值是您希望标签两侧的间距。