iPhone SDK: UIButton с возможным изображением и текстом?
У меня есть кнопка размера ширина 200 и высота 270. Я хочу иметь текст и изображение на одной кнопке. Не как фоновое изображение на этом тексте. Вместо этого я хочу отобразить текст с высотой 120 и изображение высоты 150 на той же кнопке. У кого-нибудь есть идеи? Пожалуйста, дайте мне знать, если вы не поняли мой вопрос.
8 ответов:
вы можете использовать этот код,он будет служить вашей цели
.h file code IBOutlet UIButton *testBtn; .m file code [testBtn setImage: [UIImage imageNamed:@"Image name.png"] forState:UIControlStateNormal]; [testBtn setTitleEdgeInsets:UIEdgeInsetsMake(70.0, -150.0, 5.0, 5.0)]; [testBtn setTitle:@"Your text" forState:UIControlStateNormal];
изменить координаты и размер вашей кнопки как ваше требование.Это пример кода, который поможет вам.
PS: возьмите UIButton в файле nib>сделайте его пользовательской кнопкой>подключите IBOutlet к своей пользовательской кнопке в файле nib.Вот и все.
в приведенном ниже коде показано размещение изображения и текста в кнопке с использованием свойств setImageEdgeInsets и setTitleEdgeInsets класса UIButton.
UIButton *butt=[UIButton buttonWithType:UIButtonTypeCustom ]; [butt setFrame:CGRectMake(0, 0, 100, 100)]; [butt setBackgroundImage:[UIImage imageNamed:@"sig.png"] forState:UIControlStateNormal]; [butt setImageEdgeInsets:UIEdgeInsetsMake(0.0, 0.0, 50.0, 0.0)]; [butt setTitleEdgeInsets:UIEdgeInsetsMake(75.0, 0.0, 0.0, 0.0)]; [butt setTitle:@"hello" forState:UIControlStateNormal]; [butt setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; [self.view addSubview:butt];
используйте понятие подвидов. Возьмите 3 элемента управления,
UIButton
(200x270),UILabel
(200x120) иUIImageView
(200x150). Назначьте изображение наUIImageView
и набор текстаUILabel
. Расположите элементы управления label и imageview на основе (x,y) расположенияUIButton
.в конце концов, вы должны иметь что-то вроде:
для следующих случаев:
UIButton *button; UILabel *label; UIImageView *imageView; [button addSubView:imageView]; [button addSubView:label];
[testBtn setBackgroudImage: [UIImage imageNamed:@"Image name.png"] forState:UIControlStateNormal]; [testBtn setTitle:@"Your text" forState:UIControlStateNormal];
Да, вы можете отображать изображение и заголовок в одной и той же кнопке, если они оба достаточно малы, чтобы соответствовать. Трудная часть приходит, когда вам нужно разобраться с размещением.
вы можете играть с
contentVerticalAlignment
иcontentHorizontalAlignment
свойстваUIButton
(наследуется отUIControl
).вы также можете использовать
titleEdgeInsets
иimageEdgeInsets
свойства, чтобы переместить заголовок и изображение из размещения, которое они получают на основе свойств выравнивания.если вы хотите очень точное или пользовательское размещение, я предлагаю переопределить
titleRectForContentRect:
иimageRectForContentRect:
методыUIButton
. Они позволяют определить рамки для вашего заголовка и изображения, и они вызываются всякий раз, когда кнопка должна быть выложена. Одно предупреждение, если вы хотите ссылатьсяself.titleLabel
внутриtitleRectForContentRect:
, убедитсяself.currentTitle
определена в первую очередь. Я получал плохую ошибку доступа, возможно, метод вызывается при первой инициализации titleLabel.
В Swift 3
let button = UIButton() //make sure the image (jpg, png) you are placing in the button //is about the right size or it will push the label off the button //add image let image = UIImage(named:"my_button_image") button.setImage(image, for: .normal) button.imageView?.contentMode = .scaleAspectFit button.imageEdgeInsets = UIEdgeInsets(top:0, left:-30, bottom:0, right:0) //adjust these to have fit right //add title button.setTitle("Fan", for: .normal) button.titleEdgeInsets = UIEdgeInsets(top:0, left:10, bottom:0, right:0) //adjust insets to have fit how you want //add button to your view - like in viewDidLoad or your own custom view setup addSubview(button)
Не забудьте установить якоря, если это делается программно, чтобы он появился/прикрепите его к ссылке на кнопку в Interface Builder при использовании раскадровки
если вы хотите иметь больше контроля над макетом, создать подкласс
UIControl
и организовать вид, который вы хотите (UILabel
,UIImageView
) в файле xib. Тогда вы можете использовать Autolayout регулярно без необходимости сортироватьUIEdgeInsets
.
С помощью кнопки subviews работал для меня в Swift 4.
- создать свою кнопку
- установить изображение для кнопки
- создать метку для текста
- добавить метку в качестве подвида кнопки
ограничьте метку внутри кнопки
let imageAndTextButton : UIButton = { let button = UIButton(frame: .zero) button.tintColor = .clear button.setImage(#imageLiteral(resourceName: "buttonImage"), for: .normal) button.imageView?.contentMode = .scaleToFill button.translatesAutoresizingMaskIntoConstraints = false return button }() let textForButtonLabel = UILabel(frame: .zero) textForButtonLabel.translatesAutoresizingMaskIntoConstraints = false textForButtonLabel.attributedText = NSAttributedString(string: "Text For Button", attributes: buttonTextAttributes) textForButtonLabel.textAlignment = .center textForButtonLabel.backgroundColor = .clear imageAndTextButton.addSubview(textForButtonLabel) imageAndTextButton.addConstraint(NSLayoutConstraint(item: textForButtonLabel, attribute: .centerX, relatedBy: .equal, toItem: imageAndTextButton, attribute: .centerX, multiplier: 1.0, constant: 0)) imageAndTextButton.addConstraint(NSLayoutConstraint(item: textForButtonLabel, attribute: .centerY, relatedBy: .equal, toItem: imageAndTextButton, attribute: .centerY, multiplier: 1.0, constant: 0))