2016-05-08 3 views
0

Я добавил UINavigationBar программно, используя этот код в viewDidLoad()Как добавить обивка к UIBarButtonItem программным

let navbar = UINavigationBar(frame: CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 59.0)) 
    self.view.addSubview(navbar) 

, а затем я добавил две кнопки, которые мне нужно, используя этот код:

let item = UINavigationItem() 
    item.leftBarButtonItem = UIBarButtonItem(title: "Back", style: .Done, target: self, action: #selector(CollectionCollectionViewController.goBack(_:))) 

    item.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .Add, target: self, action: #selector(CollectionCollectionViewController.addProduct(_:))) 

    navbar.setItems([item], animated: true) 

Все великие произведения, но эти кнопки очень близки к правым и левым краям экрана. Как я могу добавить прокладки (или поля слева и справа) к этим кнопкам?

Похоже, что:

enter image description here

Я вижу, что это расстояние между кнопками и экраном только один раз, когда я запускаю этот ViewController, когда я запускаю его во второй раз, расстояние между кнопками и экраном верно. Может ли кто-нибудь объяснить мне, почему?

ответ

0

Похоже, что ваша навигационная панель рама несет ответственность за непредвиденный недостающий интервал. Его положение x равно 0, а его ширина совпадает с шириной контроллера. Следовательно, нет интервала.

Я бы предложил добавить панель навигации в раскадровку диспетчера представлений. В большинстве случаев предпочтительнее решать как можно больше проблем с пользовательским интерфейсом в раскадровке, поскольку это уменьшает количество кода для чтения и обслуживания.

Однако, если вы хотите узнать правильное размещение и размеры рамки для навигационной панели, вы можете распечатать рамку навигационной панели. Затем вы сравниваете свой кадр, когда он появляется без пробелов со своим фреймом, когда он имеет правильное положение. Затем вы можете настроить его положение x и width соответственно.

+0

Это один из вариантов, но я хочу, чтобы добавить все в моем проекте программно. И в этом случае у меня есть проблема и не знаю, почему ... – PiterPan

+0

Я сделал это, и результат будет таким же в обоих вариантах '(0.0, 0.0, 320.0, 59.0)'. Я добавляю, что я пытаюсь добавить navbar в CollectionViewController – PiterPan

0

У меня есть решение для моей проблемы. Если мы хотим, чтобы добавить Navbar программно с нуля, мы должны сделать это шаги в viewDidLoad():

// setp 1 = create Navigation Bar 

    let navbar = UINavigationBar(frame: CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 59.0)) 
    navbar.delegate = self 

    //step 2 = create Navigation Item 

    let item = UINavigationItem() 
    item.title = "Quick choise" 


    //step 3 = create BarButtonItem and set position (left, right) 

    let leftButton = UIBarButtonItem(title: "Back", style: .Done, target: self, action: #selector(CollectionCollectionViewController.goBack(_:))) 
    item.leftBarButtonItem = leftButton 


    let rightButton = UIBarButtonItem(barButtonSystemItem: .Add, target: self, action: #selector(CollectionCollectionViewController.addProduct(_:))) 
    item.rightBarButtonItem = rightButton 

    //step 4 = add BarButtonItems to Navigation Bar 

    navbar.items = [item] 

    //step 5 = add Navigation Bar to view 

    self.view.addSubview(navbar) 
Смежные вопросы