web-dev-qa-db-ja.com

複数行のナビゲーションバーのタイトル

複数行を許可するようにナビゲーションバーのタイトルラベルを設定しようとしています。複数行のコードを配置するカスタムナビゲーションコントローラーコードがあります。すでにそこにあるコードは機能することは知っていますが、複数行の部分が機能していません。

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

しかし、テキストはまだ最後に実行されます。また、これを個々のView Controller自体に入れて、navigationItemの前にself.navigationController?.を追加しても、同じ結果が得られます。

タイトルラベルが複数行を使用しないようにするコードに欠けているものはありますか?

9
Cody Harness

複数行のnavigationBarタイトルを作成する方法のコード例を次に示します。

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 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
27
Rashwan L

これはストーリーボードで実行できます。 UIViewをナビゲーションバーにドラッグしてから、ドキュメントのアウトラインでUILabelをドラッグし、線を2に設定し、配置を中央に設定します。

enter image description here

2
foson

これを使用して、ラベルの位置を希望どおりに正確に取得します。

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の値は、ラベルのいずれかの側に必要な間隔です。

0
ZiEiTiA