如何在navigationItem titleView中从xib中心自定义视图

时间:2017-09-01 15:14:58

标签: ios swift swift3 uinavigationcontroller

我创建了具有中心垂直+中心水平约束的xib文件,稍后将成为navigationItem的titleView。 enter image description here

在xib的init中我设置了文本和图像。

class UIViewFromNib: UIView {
    @IBOutlet var view: UIView!
    @IBOutlet weak var titleLabel: UILabel!
    @IBOutlet weak var titleImageView: UIImageView!
    init(frame: CGRect,title:String,image:UIImage) {
        super.init(frame: frame)
        UINib(nibName: "NavTitle", bundle: nil)
            .instantiate(withOwner: self, options: nil)
        addSubview(view)
        view.frame = self.bounds
        titleLabel.text = title
        titleImageView.image = image
    }
}

然后,在videDidLoad中,我将视图添加到navigationItem的titleView中。

    let rect = CGRect(x: 0, y: 0, width: width, height: 40)
    let width = self.view.bounds.width
    let view = UIViewFromNib(frame: rect,
                             title:  title,
                             image: image)

    navigationItem.titleView = view
    navigationItem.titleView?.sizeToFit()

但在运行时视图不在中心。 LTR

在RTL中更糟糕

RTL

我该如何解决? 谢谢

2 个答案:

答案 0 :(得分:2)

支持自动布局。

Route::get('/cms/index', function () {
    return view('cms-templates/index');
});

Route::get('/cms', function () {
    return view('cms-templates/index');
    // tried return redirect('/cms/index')
    // tried return hello world
});

答案 1 :(得分:1)

尝试更改此行:

let rect = CGRect(x: 0, y: 0, width: width, height: 40)

let rect = CGRect(x: 0, y: 0, width: 200, height: 40)

问题是你给屏幕宽度的视图。在运行时,当后退按钮出现时,视图宽度更改为(totalWidth - navigationBackButtonWidth),这会更改其中图像的中心对齐。