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. Но вы говорите, что не делаете этого. (Конечно, вы могли бы сделать это; нет закона, который говорит, что вы должны использовать навигационный контроллер для любой реальной навигации. Я часто использую навигационный контроллер просто для того, чтобы получить панель навигации, потому что это хорошее место для таких вещей, как маленькие кнопки меню.)