2015-09-08 7 views
13

Я создал navigation bar http://oi61.tinypic.com/r0p8w4.jpg с элементом левой кнопки, добавленным из раскадровки, titleView и тремя кнопками правой кнопки мыши из кода.Навигационная панель правая кнопка бара позиции позиций

Вот код:

override func viewDidLoad() { 
    super.viewDidLoad() 

    var screenWidth = UIScreen.mainScreen().bounds.width 
    // custom title view 
    var navBarWidth: CGFloat = self.navigationController!.navigationBar.frame.size.width 
    let customTitleView = UIView(frame: CGRectMake(0, 0, navBarWidth, 44)) 
    titleLabel = UILabel(frame: CGRectMake(20, 0, navBarWidth, 40)) 
    titleLabel.text = conversationName 
    if let titleFont = UIFont(name: "Roboto-Regular", size: 20) { 
     titleLabel.font = titleFont 
    } 
    titleLabel.textColor = UIColor.whiteColor() 

    customTitleView.addSubview(titleLabel) 
    self.navigationItem.titleView = customTitleView 

    // right bar buttons 
    var searchImage = UIImage(named: "search")! 
    var clipImage = UIImage(named: "clip")! 
    var pencilImage = UIImage(named: "pencil")! 

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

    self.navigationItem.setRightBarButtonItems([pencilBtn, clipBtn, searchBtn], animated: false) 
} 

Моя проблема заключается в том, что я хочу, чтобы изменить интервал между правой кнопками, но я не знаю, как.

Я попытался добавить fixedbutton между ними, но он просто увеличил существующее пространство.

Может кто-нибудь мне помочь? Благодарю.

+1

панель навигации пренебрегает интервал .use UIBarButton containerView инициализаторе – Mousavian

+0

Используя * Roboto шрифт * на * IOS *? Ересь! ; D –

+0

@ RicardoSánchez-Sáez было указано в PRD. – mikle94

ответ

32

Я решил свою проблему таким образом:

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) 

Теперь она хорошо выглядит,

Difference between before and after

+0

Вы можете использовать функцию вместо повторения всего этого кода. Но, спасибо, это сработало! – LaloLoop

+1

Это не сработало для меня. – Mutawe

+0

Идеальный ответ Мне это нравится. поэтому ниже я собираюсь дать ответ в объективе c –

-3

Это один из способов его решения.

Используйте UIBarButtonItem как пространство

let space = UIBarButtonItem(barButtonSystemItem: .FixedSpace, target: nil, action: nil) 
space.width = -20 // adjust as needed 
self.navigationItem.rightBarButtonItems = [pencilBtn, clipBtn, searchBtn, space] 
+2

Я уже пробовал это, он не работает. – mikle94

+0

Не работает !!! – mythicalcoder

2

Для 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] 

Заменить ViewController с контроллером вида

0

Попробуйте изменить constraintEqualToConstant

[myUIButton.widthAnchor constraintEqualToConstant:24].active = YES; 
[myUIButton.heightAnchor constraintEqualToConstant:24].active = YES; 
0

Это решение находится в 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]; 

эталонным Решение от @ mikle94. Его ответ в Свифте.

0

пусть rightActionButton: UIButton = UIButton()

если #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]