Добавление CGGradient в качестве подуровня в UILabel скрывает текст метки
Я хочу добавить градиент в качестве фона для метки. Для этого я использовал следующий код. но проблема в том, что хотя цвет градиента появляется на ярлыке, но текст не отображается. пожалуйста, помогите
lblPatientDetail.text=PatientsDetails;
lblPatientDetail.textColor=[UIColor blackColor];
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = lblPatientDetail.bounds;
gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor whiteColor] CGColor],(id)[[UIColor colorWithRed:255/255.0 green:239/255.0 blue:215/255.0 alpha:1.0] CGColor],nil];
[lblPatientDetail.layer addSublayer:gradient];
lblPatientDetail.backgroundColor=[UIColor clearColor];
Ответы
Ответ 1
Вставка подуровня в UILabel скрывает текст, поэтому лучший способ получить то, что вы хотите, - добавить ярлык и слой градиента в UIView.
UIView *gradientLabelView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 30)];
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = gradientLabelView.bounds;
gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor whiteColor] CGColor],(id)[[UIColor colorWithRed:255/255.0 green:239/255.0 blue:215/255.0 alpha:1.0] CGColor],nil];
[gradientLabelView.layer addSublayer:gradient];
lblPatientDetail.frame = gradientLabelView.bounds;
lblPatientDetail.backgroundColor = [UIColor clearColor];
[gradientLabelView addSubview:lblPatientDetail];
[self addSubview:gradientLabelView];
Ответ 2
Предлагаемый ответ с UILabel внутри UIView работает. По-видимому, UILabels не может иметь текст внутри них после того, как фон будет иметь цветной фон с градиентом... не знаю, почему....
Но вот полный код для решения.... надеюсь, это кому-то поможет:)
UIView *EnvironmentalsLabelView = [[UIView alloc] initWithFrame:CGRectMake(0, 300, 320, 20)];
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = EnvironmentalsLabelView.bounds;
gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor darkGrayColor]CGColor], (id)[[UIColor blackColor]CGColor], nil];
[EnvironmentalsLabelView.layer insertSublayer:gradient atIndex:0];
[scroller addSubview:EnvironmentalsLabelView];
UILabel *EnviornmentalsLabelText = [[UILabel alloc] initWithFrame:EnvironmentalsLabelView.bounds];
[EnviornmentalsLabelText setFont:[UIFont fontWithName:@"Arial-BoldMT" size:12.0f]];
EnviornmentalsLabelText.textAlignment = NSTextAlignmentCenter;
EnviornmentalsLabelText.backgroundColor = [UIColor clearColor];
EnviornmentalsLabelText.text = @"Environmental Benefits";
[EnvironmentalsLabelView addSubview:EnviornmentalsLabelText];
Счастливое кодирование!!!!
Ответ 3
Еще один дополнительный вопрос, чтобы исправить ответ.
Если вы используете автозапуск для размещения своего пользовательского представления, вы можете получить эту проблему - http://prntscr.com/5tj7bx
Таким образом, ваш вид имеет другой размер, тогда subView - слой UILabel и subLayer - gradient.
Я решаю эту проблему, добавив один метод
class wResultView: UIView {
var label = UILabel()
var gradientLayer = CAGradientLayer()
override func layoutSubviews() {
gradientLayer.frame = self.bounds
label.frame = self.bounds
}
......
Ответ 4
Я думаю, вы можете создать цвет градиента, отрегулировав альфа-значение в приведенном выше коде.
gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor whiteColor] CGColor],(id)[[UIColor colorWithRed:255/255.0 green:239/255.0 blue:215/255.0 alpha:0.1] CGColor],nil];
Я смог получить эффект градиента, сделав это.