У меня есть приложение, в котором используются настраиваемые кнопки, кнопки должны иметь просто фоновое изображение. Вместо добавления фонового изображения ко всем кнопкам я бы предпочел подкласс UIButton. Было бы здорово, если бы настраиваемая кнопка также правильно отображалась в Интерфейсном Разработчике. Это моя попытка:
import UIKit
@IBDesignable
class STACPatientButton: UIButton {
override init(frame: CGRect) {
NSLog("initWithFrame");
super.init(frame: frame)
_setup()
}
required init(coder: NSCoder) {
NSLog("initWithCoder");
super.init(coder: coder)
_setup()
}
override func prepareForInterfaceBuilder() {
_setup()
}
private func _setup() {
if let image = UIImage(named:"patientButton.png") {
let insets = UIEdgeInsetsMake(8.0, 8.0, 8.0, 8.0)
let strechableImage = image.resizableImageWithCapInsets(insets)
self.setBackgroundImage(strechableImage, forState: UIControlState.Normal)
self.contentEdgeInsets = UIEdgeInsetsMake(16.0, 16.0, 16.0, 16.0)
self.sizeToFit()
}
}
}
Где это PatientButton.png
Две проблемы:
- кнопка не отображается должным образом в Интерфейсном Разработчике. Он просто отображается как системная кнопка
- заголовок не отображается, если я не изменю размер кнопки в Интерфейсном Разработчике, чтобы оставить место для изображения; т.е. свойство
contentEdgeInsets
иsizeToFit
, похоже, не имеют никакого эффекта
Думаю, это довольно простой вопрос, но я не могу его решить. Какой-нибудь совет?
ИЗМЕНИТЬ 1 согласно обсуждению с Мэттом ниже:
Я пытаюсь выделить место вокруг названия кнопки. Это было мое понимание contentEdgeInsets
, но похоже, что я ошибаюсь. Без contentEdgeInsets
это отрисовка кнопки
что выглядит ужасно. Я хочу программно получить что-то вроде этого, без необходимости изменять размер кнопки в IB