How to change the uinavigationbar title's position?

前端 未结 4 423
广开言路
广开言路 2021-01-03 03:30

I\'ve managed to change the navigationbar height by using my own navigationbar, but the title is still centered. I want it to be at the 72px position from the left.

相关标签:
4条回答
  • 2021-01-03 04:09
    navBar.setTitleVerticalPositionAdjustment(CGFloat(7), forBarMetrics: UIBarMetrics.Default)
    
    0 讨论(0)
  • 2021-01-03 04:10

    Setting custom view with left align.

    Setting custom view as leftBarButtonItem is not conveniently, because we will have a problems with back button.

    Setting custom view as subview of navigationBar is not conveniently because:

    • we can't to easy control width of custom view when right buttons are set. We can get overlapping custom view and right buttons
    • we need to add custom navTitleView and remove it every viewWillAppear and viewWillDissapear. This is additional, not clean code.

    So? I've just added width constraint to the customTitleView.

    Inside of CustomTitleView class:

      private func layoutViewsConfig() {
        // Width constraint needed to align view to left
        let widthConstraint = NSLayoutConstraint.init(item: self, attribute: .width, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1, constant: UIScreen.main.bounds.width)
        widthConstraint.priority = .init(748)
        let heightConstraint = NSLayoutConstraint.init(item: self, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1, constant: 50)
       self.addConstraint(widthConstraint)
       self.addConstraint(heightConstraint)    
      }        
    

    Then, inside of your ViewController:

    var navigationTitleView = NavigationSubtitleView() 
    self.navigationItem.titleView = navigationTitleView
    

    And we have:

    0 讨论(0)
  • 2021-01-03 04:14

    Another solution is to simply indent the title:

    let paragraphStyle = NSMutableParagraphStyle()
    paragraphStyle.firstLineHeadIndent = 72
    
    navigationBar.titleTextAttributes = [
        .foregroundColor: UIColor.purple,
        .paragraphStyle: paragraphStyle
    ]
    
    0 讨论(0)
  • 2021-01-03 04:17

    Create a UIView object add UIButton and UILabel in it to show a similar view. Add this custom view into left bar button item of navigation controller.

    An example screen shot to visualise a custom view and related code:

    enter image description here

    override func viewDidLoad() {
        super.viewDidLoad()
    
        var customView = UIView(frame: CGRect(x: 0.0, y: 0.0, width: 100.0, height: 44.0))
        customView.backgroundColor = UIColor.yellow
    
        var button = UIButton.init(type: .custom)
        button.setBackgroundImage(UIImage(named: "hamburger"), for: .normal)
        button.frame = CGRect(x: 0.0, y: 5.0, width: 32.0, height: 32.0)
        button.addTarget(self, action: #selector(menuOpen(button:)), for: .touchUpInside)
        customView.addSubview(button)
    
        var marginX = CGFloat(button.frame.origin.x + button.frame.size.width + 5)
        var label = UILabel(frame: CGRect(x: marginX, y: 0.0, width: 65.0, height: 44.0))
        label.text = "Inbox"
        label.textColor = UIColor.white
        label.textAlignment = NSTextAlignment.right
        label.backgroundColor = UIColor.red
        customView.addSubview(label)
    
        var leftButton = UIBarButtonItem(customView: customView)
        self.navigationItem.leftBarButtonItem = leftButton
    }
    
    func menuOpen(button: UIButton) {
        // Handle menu button event here...
    }
    
    0 讨论(0)
提交回复
热议问题