Программное добавление тени к метке UIButton

Я пытаюсь добавить черную тень размером 1px к метке кнопки, но безуспешно. Я пробовал это: self.setTitleShadowOffset = CGSizeMake(0, -1);, но я получаю:

Запрос члена setTitleShadowOffset в чем-то, кроме структуры или союза

Любые предложения были бы фантастическими спасибо!


person edhog    schedule 03.03.2011    source источник


Ответы (6)


Другие ответы неправильно устанавливают цвет тени (я подозреваю, что они не заметили, потому что пытались установить цвет тени таким, какой он по умолчанию, черный.)

Этот код помог мне добавить белую тень к тексту моей кнопки:

myButton.titleLabel.shadowOffset = CGSizeMake(0, 1);
[myButton setTitleShadowColor:[UIColor whiteColor] forState:UIControlStateNormal];
person ArtOfWarfare    schedule 01.01.2013
comment
Настройка myKey.titleLabel.shadowColor действительно не работает! - person Berik; 28.01.2013
comment
Вы не можете установить это с помощью свойств — вам нужно установить его с помощью полного метода, потому что в противном случае вы уходите из forState (это означает, что при изменении состояния оно потеряет установленный вами цвет). Фрагмент кода, который я предоставил, должен работать . - person ArtOfWarfare; 29.01.2013
comment
На данный момент это лучшее решение, просто хотел указать, что правильный способ сделать это - использовать CGSizeMake, а не CGSize. - person Alejandro Luengo; 06.04.2015
comment
Забавно - через 3 года после того, как я опубликовал это, и почти через 5 лет после того, как вопрос был задан, он наконец был отмечен как правильный ответ. - person ArtOfWarfare; 16.12.2015

Правильное свойство — self.titleLabel.shadowOffset:

UIButton *b = [UIButton buttonWithType:UIButtonTypeRoundedRect];    
[b setTitleShadowColor:[UIColor purpleColor] forState:UIControlStateNormal];
b.titleLabel.shadowOffset = CGSizeMake(1.0, 1.0);
[b setTitle:@"Hello, I'm a Button" forState:UIControlStateNormal];
b.frame = CGRectMake(10.0, 10.0,300.0, 40.0);
person fsaint    schedule 03.03.2011
comment
Линия shadowColor работает не так, как вы думаете. Вам нужно использовать setShadowColor:forState: (вы не заметите сбоя в этом примере, потому что он устанавливает черный цвет тени, который используется по умолчанию.) - person ArtOfWarfare; 29.01.2013
comment
Спасибо @ArtOfWarfare. Не пробовал это в iOS 6, и поведение могло измениться. Я протестирую и обновлю код. - person fsaint; 29.01.2013
comment
@Felz, он никогда не вел себя так, как ты думал. Цвета теней всегда были статными, как и другие свойства цвета в iOS, что означает, что они сбрасываются на свой цвет по умолчанию, как только их состояние изменяется (IE, потому что они нажаты или выделены), если вы не используете их методы setColor:forState:. Вы просто не заметили этого в данном конкретном случае, потому что цвет теней по умолчанию черный. - person ArtOfWarfare; 08.09.2013

setTitleShadowOffset для UIButton устарело. Используйте свойство shadowOffset titleLabel объекта UIButton

buttonName.titleLabel.shadowOffset = CGSizeMake(0, -1);

person visakh7    schedule 03.03.2011

В Свифт 3.0

myButton.titleLabel?.layer.shadowRadius = 3
myButton.titleLabel?.layer.shadowColor = UIColor.black.cgColor
myButton.titleLabel?.layer.shadowOffset = CGSize(width: 0, height: 1)
myButton.titleLabel?.layer.shadowOpacity = 0.5
myButton.titleLabel?.layer.masksToBounds = false

введите описание изображения здесь

person Raphael Souza    schedule 21.09.2016
comment
Это не устанавливает тень на фактический текст. - person Sami Samhuri; 15.10.2016
comment
Я должен ошибаться. Извини за это! - person Sami Samhuri; 19.10.2016

для Свифт 3:

  button.setTitleShadowColor(UIColor.red, for: .normal)
  button.titleLabel?.shadowOffset = CGSize(width: 2, height: 2)
person Wilson    schedule 22.10.2016

Вот как добавить тень к заголовку кнопки в Objective-C с помощью свойства radius:

#import <QuartzCore/QuartzCore.h>    

button.titleLabel.layer.shadowOffset = CGSizeMake(2.0, 2.0);
button.titleLabel.layer.shadowColor = [UIColor colorWithWhite:0.1 alpha:0.7].CGColor;
button.titleLabel.layer.shadowRadius = 2.0;
button.titleLabel.layer.shadowOpacity = 1.0;
button.titleLabel.layer.masksToBounds = NO;
person Userich    schedule 01.08.2018