Всем привет!
Пишу приложение, которое выводит изображения собак плиткой через 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()
}