0

ナビゲーションtitleViewに関して問題があります。
titleViewは私の右のbarbuttonItemと画面外をカバーしています。
私は、中央の領域にちょうどtitleViewが必要で、barbuttonItemのための右の領域を持っています。
幅を正しく設定できないため、タイトルの幅を設定する方法を知りたいです。
また、ラベルの途中で切り捨てたいと思っています。
私の何が悪いですか?
ありがとうございます。あなたは事前にタイトルビューサイズ/フレームを計算する必要が
swift3でnavigationTitleViewとTruncateラベルの幅を設定する方法

Here is Image about my question.
Here is Image about my question.

self.navigationItem.titleView = setTitle(title: name, subtitle: "") 


func setTitle(title:String, subtitle:String) -> UIView { 
    let titleLabel = UILabel(frame: CGRect(x:0, y:5, width:0, height:0)) 

    titleLabel.backgroundColor = UIColor.clear 
    titleLabel.textColor = UIColor.white 
    titleLabel.font = defaultTitleFont 
    titleLabel.text = title 
    titleLabel.sizeToFit() 

    let subtitleLabel = UILabel(frame: CGRect(x:5, y:18, width:0, height:0)) 
    subtitleLabel.backgroundColor = UIColor.clear 
    subtitleLabel.textColor = UIColor.red 
    subtitleLabel.font = UIFont.systemFont(ofSize: 20) 
    subtitleLabel.text = subtitle 
    subtitleLabel.sizeToFit() 

    let titleView = UIView(frame: CGRect(x:0, y:0, width:max(titleLabel.frame.size.width, subtitleLabel.frame.size.width), height:35)) 
    titleView.addSubview(titleLabel) 
    //titleView.addSubview(subtitleLabel) 

    let widthDiff = subtitleLabel.frame.size.width - titleLabel.frame.size.width 

    if widthDiff > 0 { 
     var frame = titleLabel.frame 
     frame.origin.x = widthDiff/2 
     titleLabel.frame = frame.integral 
    } else { 
     var frame = subtitleLabel.frame 
     frame.origin.x = abs(widthDiff)/2 
     subtitleLabel.frame = frame.integral 
    } 

    return titleView 
} 
+0

使用 ' label.lineBreakMode = .byTruncatingMiddle'を実行すると、 'let titleView = UIView(frame:CGRect(x:0、y:0、width:max(titleLabel.frame.size.width、subtitleLabe私はそれがあなたの幅の問題の起源だと思う。 –

+0

こんにちは、Reinier Melianしかし、私はこれを設定しました "let titleView = UIView(frame:CGRect(x:0、y:l.frame.size.width)、height:35) 0、width:200、height:35)) "これは機能しません。 – Beginnerrrrrr

+0

提案がありますか? – Beginnerrrrrr

答えて

0

。 ナビゲーションバーに表示される画面の幅とバーボタン項目の数を考慮に入れて、これを行う方法があります。

(タイトルだけを示すための簡略化、字幕なし)次のコードを見てみましょう:

func getTitleView (title:String, numOfButtons: Int = 0) -> UIView { 
    let barButtonSize = 70 
    let offset: CGFloat = CGFloat(numOfButtons * barButtonSize) 
    let frame = CGRect(x: 0, y: 0, width: self.view.frame.size.width - offset, height: 35) 
    let titleView = UIView(frame:frame) 

    let titleLabel = UILabel(frame: titleView.bounds) 

    titleLabel.backgroundColor = UIColor.clear 
    titleLabel.textColor = UIColor.red 
    titleLabel.font = UIFont.systemFont(ofSize: 14) 
    titleLabel.text = title 
    titleLabel.numberOfLines = 1 
    titleLabel.textAlignment = .center 
    titleLabel.lineBreakMode = .byTruncatingMiddle 
    titleView.addSubview(titleLabel) 
    return titleView 
} 

とのviewDidLoadから:

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .camera, target: self, action: nil) 
    self.navigationItem.leftBarButtonItem = UIBarButtonItem(barButtonSystemItem: .bookmarks, target: self, action: nil) 

    self.navigationItem.titleView = getTitleView(title: "Wow Wow Wow Wow Wow Wow Wow Wow Wow Wow Wow Wow Wow Wow Wow WowWow Wow Wow Wow Wow Wow Wow WowWow WowWowWowWowWowWowWowWow Wow Wow Wow Wow Wow Wow Wow!!", numOfButtons: 2) 
} 

そして出力: enter image description here

+0

あなたのアドバイスをありがとう。 – Beginnerrrrrr

関連する問題