2015-12-15 164 views
5

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

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 

但是文本仍然在最后跑掉。我也试过把它放到个人视图控制器本身,在navigationItem前面加上self.navigationController?.,结果相同。

有没有什么我在我的代码,将保持标题标签使用多行缺少?

+0

您的'navigationBar.frame.width'尺寸可能尚未适合屏幕大小。你可能想重载'viewDidLayoutSubviews'来检测正确的帧。 –

回答

20

下面是如何创建一个多行的导航栏标题

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 

雨燕3.0的代码示例:

let label = UILabel(frame: CGRect(x:0, y:0, width:400, height:50)) 
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 
+0

需要进行一些调整才能使其表现得更像我想要的,但这确实有帮助。 –

+0

我用'navigationItem.titleView'没有明确设置框架,它工作得很好。 – gutte

0

使用此得到完全按照您想要的标签位置:

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) 

顶部lin的110值e是标签两侧的间距。

0

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

enter image description here