繁体   English   中英

多行导航栏标题

[英]Multiline Navigationbar Title

我正在尝试在导航栏中设置标题标签以允许多行。 我有自定义导航控制器代码,我将多行代码放入其中。 我知道代码已经在那里工作,但我的多行部分不起作用。

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

但文字最后还是跑掉了。 我也尝试将其放入单个视图控制器本身,添加self.navigationController?. navigationItem前面有相同的结果。

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

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

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

斯威夫特 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

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

在此处输入图片说明

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

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)

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

swift 5+ 非常简单的解决方案

func titleMultiLine(topText: String, bottomText: String) {
    //            let titleParameters = [NSForegroundColorAttributeName : UIColor.white,
    //                                   NSFontAttributeName : UIFont.<Font>]
//            let subtitleParameters = [NSForegroundColorAttributeName : UIColor.<Color>(),
    //                                      NSFontAttributeName : UIFont.<Font>]
    let titleParameters = [NSAttributedString.Key.foregroundColor : UIColor.white]
    
    let subtitleParameters = [NSAttributedString.Key.foregroundColor : UIColor.white]
    
    let title:NSMutableAttributedString = NSMutableAttributedString(string: topText, attributes: titleParameters)
    let subtitle:NSAttributedString = NSAttributedString(string: bottomText, attributes: subtitleParameters)
    
    title.append(NSAttributedString(string: "\n"))
    title.append(subtitle)
    
    let size = title.size()
    
    let titleLabel = UILabel(frame: CGRect(x: 0, y: 0, width: size.width, height: size.height))
    titleLabel.attributedText = title
    titleLabel.numberOfLines = 0
    titleLabel.textAlignment = .center
    
    navigationItem.titleView = titleLabel
}

函数调用

self.titleMultiLine(topText: "I am top text Title", bottomText: "bottom text")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM