navigation bar right bar button items spacing

前端 未结 10 2072
执念已碎
执念已碎 2021-01-31 16:47

I have created a with left bar button item added from storyboard, titleView and three right bar button items from code.

Here is the code:

override func         


        
相关标签:
10条回答
  • 2021-01-31 17:13

    Try to change the constraintEqualToConstant

    [myUIButton.widthAnchor constraintEqualToConstant:24].active = YES;
    [myUIButton.heightAnchor constraintEqualToConstant:24].active = YES;
    
    0 讨论(0)
  • 2021-01-31 17:17

    Supporting solution by @mkz, by using function to reduce the code (Swift 4.2.1)

    Added most important parameters to the function (note how to pass selector to a function), you may want to add more as per your need.

    func makeCustomNavigationButton(imageName: String, action: Selector) -> UIBarButtonItem{
    
        let image = UIImage(named: imageName)!
        let btn: UIButton = UIButton(type: UIButton.ButtonType.custom)
        btn.setImage(image, for: .normal)
        btn.addTarget(self, action: action, for: .touchUpInside)
        btn.frame = CGRect(x: 0, y: 0, width: 30, height: 30)
        let barBtn = UIBarButtonItem(customView: btn)
    
        return barBtn
    }
    

    How to call:

    let search = self.makeCustomNavigationButton(imageName: "search", action: #selector(searchBtnPressed(_:)))
    let clip = self.makeCustomNavigationButton(imageName: "clip", action: #selector(clipBtnPressed(_:)))
    let pencil = self.makeCustomNavigationButton(imageName: "pencil", action: #selector(pencilBtnPressed(_:)))
    self.navigationItem.rightBarButtonItems = [search, clip, pencil]
    
    0 讨论(0)
  • 2021-01-31 17:18

    You can also wire things up first in Storyboard.
    I have two right bar button items.

    (This is objective-c code, which you can modify for swift.)

    First create references to them in view controller.

    @interface MyViewController ()
        @property (weak, nonatomic) IBOutlet UIButton *smsButton;
        @property (weak, nonatomic) IBOutlet UIButton *checkoutButton;
    @end
    

    Then, in viewDidLoad, adjust their widths and heights.

    // Adjust right bar button item spacing.
    self.smsButton.frame = CGRectMake(0, 0, 30, 30);
    self.lockButton.frame = CGRectMake(0, 0, 30, 30);
    
    0 讨论(0)
  • 2021-01-31 17:20
    // create three nav bar buttons
        var searchBtn = UIBarButtonItem(image: searchImage, style: UIBarButtonItemStyle.Plain, target: self, action: Selector("searchBtnPressed"))
        searchBtn.tintColor = UIColor.whiteColor()
        var clipBtn = UIBarButtonItem(image: clipImage, style: UIBarButtonItemStyle.Plain, target: self, action: Selector("clipBtnPressed"))
        clipBtn.tintColor = UIColor.whiteColor()
        var pencilBtn = UIBarButtonItem(image: pencilImage, style: UIBarButtonItemStyle.Plain, target: self, action: Selector("pencilBtnPressed"))
        pencilBtn.tintColor = UIColor.whiteColor()
    
    // create a spacer
      var space = UIBarButtonItem(barButtonSystemItem: .fixedSpace, target: self, action: nil)
      space.width = 10
    
      var buttons = [pencilBtn, space, clipBtn, space, searchBtn]
      navigationItem?.rightBarButtonItems = buttons
    
    0 讨论(0)
  • 2021-01-31 17:24

    Set testButton.frame doesn't help.

    This solution is correct for me!

    rightButton.imageEdgeInsets = UIEdgeInsets(top: 3, left: 10, bottom: 7, right: 0)
    
    0 讨论(0)
  • 2021-01-31 17:31
    let rightActionButton:UIButton = UIButton()
    
    if #available(iOS 11.0, *) {
    
        let widthConstraint = rightActionButton.widthAnchor.constraint(equalToConstant: 30)
        let heightConstraint = rightActionButton.heightAnchor.constraint(equalToConstant: 30)
        heightConstraint.isActive = true
        widthConstraint.isActive = true
    }
    else {
        rightActionButton.frame = CGRect.init(x: 0, y: 0, width: 30, height: 30)
    }
    
    rightActionButton.setImage(UIImage.init(named: "3-dots-right-button"), for: .normal)
    rightActionButton.addTarget(self, action: #selector(handleRightMenu), for: UIControlEvents.touchUpInside)
    rightActionButton.setTitle("", for: .normal)
    rightActionButton.tintColor = UIColor(hex:K.NODD_GREEN_HEX)
    
    
    let rightActionBarButton:UIBarButtonItem = UIBarButtonItem(customView: rightActionButton)
    
    let rightBarButtonItem1 = rightActionBarButton
    let rightBarButtonItem2 = UIBarButtonItem(barButtonSystemItem: .action, target: self, action: #selector(handleRight2Menu))
    
    self.navigationItem.rightBarButtonItems = [rightBarButtonItem1,rightBarButtonItem2]
    
    0 讨论(0)
提交回复
热议问题