複数行を許可するようにナビゲーションバーのタイトルラベルを設定しようとしています。複数行のコードを配置するカスタムナビゲーションコントローラーコードがあります。すでにそこにあるコードは機能することは知っていますが、複数行の部分が機能していません。
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?.
を追加しても、同じ結果が得られます。
タイトルラベルが複数行を使用しないようにするコードに欠けているものはありますか?
複数行の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
これを使用して、ラベルの位置を希望どおりに正確に取得します。
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の値は、ラベルのいずれかの側に必要な間隔です。