navigation bar right bar button items spacing

前端 未结 10 2073
执念已碎
执念已碎 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:32

    This solution is in Objective C

    UIImage *settingImageName = [UIImage imageNamed:@"Menu_Burger_Icon"];
    UIButton * settingButton = [UIButton buttonWithType:UIButtonTypeCustom];
    [settingButton setImage:settingImageName forState:UIControlStateNormal];
    [settingButton addTarget:self action:@selector(settingsBtnClicked) forControlEvents:UIControlEventTouchUpInside];
    settingButton.frame = CGRectMake(0, 0, 30, 30);
    
    UIBarButtonItem *settingBarButton = [[UIBarButtonItem alloc] initWithCustomView:settingButton];
    
    UIImage *notificationImageName = [UIImage imageNamed:@"NotificationON"];
    UIButton * notificationButton = [UIButton buttonWithType:UIButtonTypeCustom];
    [notificationButton setImage:notificationImageName forState:UIControlStateNormal];
    [notificationButton addTarget:self action:@selector(notificationButtonClicked) forControlEvents:UIControlEventTouchUpInside];
    notificationButton.frame = CGRectMake(0, 0, 30, 30);
    UIBarButtonItem *notificationBarButton = [[UIBarButtonItem alloc] initWithCustomView:notificationButton];
    
    self.navigationItem.rightBarButtonItems  = @[settingBarButton,notificationBarButton];
    

    Solution reference by @mikle94. His answer is in Swift.

    0 讨论(0)
  • 2021-01-31 17:33

    This is one of methods to solve that.

    Use UIBarButtonItem as a space

    let space = UIBarButtonItem(barButtonSystemItem: .FixedSpace, target: nil, action: nil)
    space.width = -20 // adjust as needed
    self.navigationItem.rightBarButtonItems = [pencilBtn, clipBtn, searchBtn, space]
    
    0 讨论(0)
  • 2021-01-31 17:36

    I solved my problem in this way:

    var searchImage = UIImage(named: "search-selected")!
    var clipImage = UIImage(named: "clip")!
    var pencilImage = UIImage(named: "pencil")!
    
    let searchBtn: UIButton = UIButton.buttonWithType(UIButtonType.Custom) as! UIButton
    searchBtn.setImage(searchImage, forState: UIControlState.Normal)
    searchBtn.addTarget(self, action: "searchBtnPressed", forControlEvents: UIControlEvents.TouchUpInside)
    searchBtn.frame = CGRectMake(0, 0, 30, 30)
    let searchBarBtn = UIBarButtonItem(customView: searchBtn)
    
    let clipBtn: UIButton = UIButton.buttonWithType(UIButtonType.Custom) as! UIButton
    clipBtn.setImage(clipImage, forState: UIControlState.Normal)
    clipBtn.addTarget(self, action: "clipBtnPressed", forControlEvents: UIControlEvents.TouchUpInside)
    clipBtn.frame = CGRectMake(0, 0, 30, 30)
    let clipBarBtn = UIBarButtonItem(customView: clipBtn)
    
    let pencilBtn: UIButton = UIButton.buttonWithType(UIButtonType.Custom) as! UIButton
    pencilBtn.setImage(pencilImage, forState: UIControlState.Normal)
    pencilBtn.addTarget(self, action: "pencilBtnPressed", forControlEvents: UIControlEvents.TouchUpInside)
    pencilBtn.frame = CGRectMake(0, 0, 30, 30)
    let pencilBarBtn = UIBarButtonItem(customView: pencilBtn)
    
    self.navigationItem.setRightBarButtonItems([pencilBarBtn, clipBarBtn, searchBarBtn], animated: false)
    

    Now it looks good,

    Update for Swift 4.1

    let testButton : UIButton = UIButton.init(type: .custom)
    testButton.setImage(editImage, for: .normal)
    testButton.addTarget(self, action: #selector(didTapCameraButton), for: .touchUpInside)
    testButton.frame = CGRect(x: 0, y: 0, width: 30, height: 30)
    let addButton = UIBarButtonItem(customView: testButton)
    
    0 讨论(0)
  • 2021-01-31 17:37

    For Swift 3:

    let searchBtn: UIButton = UIButton(type: UIButtonType.custom)
    searchBtn.setImage(UIImage(named: "search"), for: [])
    searchBtn.addTarget(self, action: #selector(ViewController.searchBtnPressed(_:)), for: UIControlEvents.touchUpInside)
    searchBtn.frame = CGRect(x: 0, y: 0, width: 30, height: 30)
    let searchButton = UIBarButtonItem(customView: searchBtn)
    
    let clipBtn: UIButton = UIButton(type: UIButtonType.custom)
    clipBtn.setImage(UIImage(named: "clip"), for: [])
    clipBtn.addTarget(self, action: #selector(ViewController.clipBtnPressed(_:)), for: UIControlEvents.touchUpInside)
    clipBtn.frame = CGRect(x: 0, y: 0, width: 30, height: 30)
    let clipButton = UIBarButtonItem(customView: clipBtn)
    
    let pencilBtn: UIButton = UIButton(type: UIButtonType.custom)
    pencilBtn.setImage(UIImage(named: "pencil"), for: [])
    pencilBtn.addTarget(self, action: #selector(ViewController.pencilBtnPressed(_:)), for: UIControlEvents.touchUpInside)
    pencilBtn.frame = CGRect(x: 0, y: 0, width: 30, height: 30)
    let pencilButton = UIBarButtonItem(customView: pencilBtn)
    
    self.navigationItem.rightBarButtonItems = [pencilButton, clipButton, searchButton]
    

    Replace ViewController with your view controller

    0 讨论(0)
提交回复
热议问题