Как убрать задвоение изображения у bar button?

Всем привет!
Пишу приложение, которое выводит изображения собак плиткой через CollectionView. Задача: добавить функцию переключения вида с 2-х плиток в ряд на 3 плитки.

Для того чтобы сделать такой переключатель, сделал Bar Button Item, присвоил ему изображение square.grid.2x2.fill
Написал функцию, которая меняет отоборажение и задает новую картинку кнопке. Все работает, но появилась проблема, которую не смог решить своими силами - при нажатии на кнопку появляется второе изображение и size кнопки изменяется:

Тут скрины кнопки: https://drive.google.com/drive/folders/1uY82VNgPMn...

Кнопку создаю и вставляю кодом, не через storyboard
override func viewDidLoad() {
            super.viewDidLoad()
            let button: UIButton = UIButton(type: .custom)
            button.setImage(UIImage(systemName: "square.grid.2x2.fill"), for: .normal)
            button.addTarget(self, action: #selector(PhotosCollectionViewController.layoutChoose), for: .touchUpInside)
            let barButton = UIBarButtonItem(customView: button)
            self.navigationItem.rightBarButtonItem = barButton


Далее функция экшна на кнопке:

@objc func layoutChoose(sender: UIButton) {
            if itemsPerRow == 3 {
                sender.setBackgroundImage(UIImage(systemName: "square.grid.3x2.fill"), for: .normal)
                itemsPerRow = 2
                collectionView.reloadData()
            } else {
                sender.setBackgroundImage(UIImage(systemName: "square.grid.2x2.fill"), for: .normal)
                itemsPerRow = 3
                collectionView.reloadData()
            }
        }


Попробовал создать кнопку в сториборде и задать функции через аутлет, но итог такой же
@IBOutlet weak var twoSquares: UIBarButtonItem!
@IBAction func twoSquersPressed(_ sender: UIBarButtonItem) {
        if itemsPerRow == 3 {
            twoSquares.setBackgroundImage(UIImage(systemName: "square.grid.3x2.fill"), for: .normal, barMetrics: .default)
            itemsPerRow = 2
            collectionView.reloadData()
        } else {
            twoSquares.setBackgroundImage(UIImage(systemName: "square.grid.2x2.fill"), for: .normal, barMetrics: .default)
            itemsPerRow = 3
            collectionView.reloadData()

        }
  • Вопрос задан
  • 73 просмотра
Пригласить эксперта
Ответы на вопрос 1
@timoninas1
Ты задаешь backroundImage, а тебе нужно в тот же параметр image BarButtonItem ставить новую фотку
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы