rightBarButtonItem появляется в центре NavigationBar - PullRequest
1 голос
/ 21 апреля 2020

Я хочу отобразить BarButtomItem справа от панели навигации. Вот что я сделал:

let imageSearch = UIImage(named: "search")?.withRenderingMode(.alwaysOriginal)
    let searchBarButtonItem = UIBarButtonItem(image: imageSearch, style: .plain, target: self, action: #selector(handleSearch))
    searchBarButtonItem.width = 20
    navigationItem.rightBarButtonItem = searchBarButtonItem

Когда я запускаю приложение, элемент панели кнопок находится посередине, а не справа, как я хочу. Я также попытался:

navigationItem.setRightBarButton(searchBarButtonItem, animated: true)

Но это не решает проблему.

РЕДАКТИРОВАТЬ: я добавил NavigationController программно в делегат сцены, так как я не использую раскадровки

Ответы [ 2 ]

0 голосов
/ 21 апреля 2020

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

    let imageSearch = UIImage(systemName: "magnifyingglass")
    let searchBarButtonItem = UIBarButtonItem(image: imageSearch, style: .plain, target: nil, action: nil)
    searchBarButtonItem.width = 20
    navigationItem.rightBarButtonItem = searchBarButtonItem

Вам нужно лишь уменьшить изображение до соответствующего размера.

0 голосов
/ 21 апреля 2020

Согласно моему опыту, вы столкнулись с этой проблемой, потому что вы добавили изображения большого размера для всех resolution 1X, 2X and 3X. Вам нужно уменьшить его до размера, более подходящего для панели навигации.

Решение: 1

Вам необходимо уменьшить его до размера, более подходящего для панели навигации. Пожалуйста, посмотрите размеры изображений для UINavigationBar

Для 1X изображения Размер: 24X24

Для 2X изображения Размер: 48X48

Для 3X изображения Размер: 72X72

Решение: 2

Если вы хотите go с теми же изображениями, вам нужно внести следующие изменения в ваш код.

Вам просто нужно добавить UIImageView внутри UIView тогда все работает как положено.

Код:

    let containerView = UIControl(frame: CGRect.init(x: 0, y: 0, width: 30, height: 30))
    containerView.addTarget(self, action: #selector(handleSearch), for: .touchUpInside)
    let imageSearch = UIImageView(frame: CGRect.init(x: 0, y: 0, width: 30, height: 30))
    imageSearch.image = UIImage(named: "search")
    containerView.addSubview(imageSearch)                
    let searchBarButtonItem = UIBarButtonItem(customView: containerView)
    searchBarButtonItem.width = 20
    navigationItem.rightBarButtonItem = searchBarButtonItem
...