Итак, imageEdgeInsets устарел в iOS 15. Сейчас код выглядит так:
класс MyButton: UIButton { инициализация (заголовок: Строка) { super.init(кадр: .ноль) setTitle(заголовок, для: .normal) setTitleColor(.white, для: .normal) фонЦвет = .синий Layer.cornerRadius = 10 setImage(UIImage(systemName: "heart.fill"), для: .normal) // Это устаревшее imageEdgeInsets = UIEdgeInsets (сверху: 0, слева: 0, снизу: 0, справа: 40) конфигурация?.contentInsets = NSDirectionalEdgeInsets (сверху: 8, в начале: 16, внизу: 8, в конце: 16) addTarget(self, action: #selector(buttonTapped), for: .touchUpInside) } требуется инициализация?(кодер aDecoder: NSCoder) { FatalError("init(coder:) не реализован") } @objc func buttonTapped() { print("Кнопка нажата!") } } Я искал решение и нашел его здесь:
imageEdgeInsets устарел в iOS 15.0
Очевидно, вместо этого мы должны использовать configuration?.imagePadding. Поэтому вместо configuration?.contentInsets = NSDirectionalEdgeInsets(верхнее: 8, ведущее: 16, нижнее: 8, завершающее: 16) мы должны использовать configuration?.imagePadding = 0.
Думаю, вы уже заметили проблему: configuration?.imagePadding принимает только один CGFloat, поэтому, если вы хотите иметь разные отступы на разных сторонах, например: code>NSDirectionalEdgeInsets(верхнее: 8, ведущее: 16, нижнее: 8, завершающее: 16) вам не повезло.
Итак, как мне избежать устаревания, сохранив при этом разные отступы для всех сторон?
*** Примечание *** Проблема аналогична titleEdgeInsets
Кроме того, после использования configuration?.imagePadding он, похоже, абсолютно ничего не делает, пока NSDirectionalEdgeInsets(верх: 8, начало: 16, низ: 8, конец: 16) работает как шарм.

Мобильная версия