Swift - панель кнопок с изображением элемента / установить размер и ширину

Чувствую, что я потратил много времени на это и хотел бы помочь. Я пытаюсь использовать пользовательский значок меню (20px x 20px) в моем barButtonItem. Проблема в том, что весы заполняют элемент панели кнопок и искажаются.

Обычно это не должно быть слишком сложным. Но я использую контроллеры представления с вкладками, а не контроллер навигации. Панель навигации, которую я опустил в контроллере вида, это просто выход.

Обычно я мог бы сделать что-то вроде этого:

    let image = UIImage(named: "menu_white")
    let frame = CGRectMake(0, 0, image!.size.width, image!.size.height)
    let button = UIButton()
    button.frame = frame
    button.setImage(image, forState: .Normal)
    let rightMenuButton = UIBarButtonItem(customView: button)
    self.navigationItem.setRightBarButtonItem(rightMenuButton, animated: true)

Но это не работает, потому что self.navigationItem фактически не ссылается ни на что в контроллере представления.

Мне нужно каким-то образом получить изображение в розетку программно, но setRightBarButtonItem не является методом UINavigationBar.

@IBOutlet weak var navBar: UINavigationBar!

Буду очень признателен за помощь, если у кого-то есть идеи.

1 ответ

Решение

"Свободная" панель навигации работает так, что вы настраиваете UINavigationItem и устанавливаете массив, содержащий его, как панель навигации. items, как в этом примере кода (из моей книги):

let ni = UINavigationItem(title: "Tinker")
let b = UIBarButtonItem(title: "Evers", style: .Plain, target: self, action: "pushNext:")
ni.rightBarButtonItem = b
self.navbar.items = [ni]

Таким образом, вы могли бы предположительно сделать что-то подобное.

self.navigationItem Это просто способ заставить это сделать автоматически в особой ситуации, когда вы используете UINavigationController. Но вы говорите, что не делаете этого. (Конечно, вы могли бы сделать это; нет закона, который говорит, что вы должны использовать навигационный контроллер для любой реальной навигации. Я часто использую навигационный контроллер просто для того, чтобы получить панель навигации, потому что это хорошее место для таких вещей, как маленькие кнопки меню.)

Другие вопросы по тегам