0

我对导航 titleView 有疑问。
titleView 覆盖我的右侧 barbuttonItem 并超出屏幕。
我需要 titleView 位于中心区域,并且 barbuttonItem 有正确的区域。
我想知道如何设置我的标题的宽度,因为我无法成功设置宽度。
而且我还想截断中间的标签。
我怎么了?
谢谢。

这是关于我的问题的图片。
这是关于我的问题的图片。

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
}
4

1 回答 1

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)
}

并输出: 在此处输入图像描述

于 2017-07-20T13:05:43.407 回答