2016-07-03 12 views
1

私はiOS開発を初めて利用しており、UIStackViewで作業しています。
UIStackViewの子オブジェクトとしてUILabelsを2つ作成するときは、それぞれUILabelのグラデーションバックラウンドカラーを作成する次のコードが正常に動作します。UIStackViewのUILabelsの背景をグラデーションカラーに変更する

UILabel *label; 
for (int ii = 1; ii < 3; ii++) { 
    label = [self.view viewWithTag:ii]; 

    CAGradientLayer *gradient = [CAGradientLayer layer]; 
    gradient.frame = label.bounds; 
    gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor yellowColor]CGColor], (id)[[UIColor grayColor]CGColor], nil]; 
    [label.layer insertSublayer:gradient atIndex:0]; 

    UILabel *newLabel = [[UILabel alloc] initWithFrame:label.bounds]; 
    newLabel.backgroundColor = [UIColor clearColor]; 
    newLabel.text = label.text; 
    [label addSubview:newLabel]; 
} 

しかし、私は、コード怒鳴るを使用してプログラム的に2 UILabelsを作成し、各UILabelのグラデーション背景が動作しないとbackroundの色は白のまま作るための上記 私のコード。
誰か助けてもらえますか?

UILabel *myLabel; 
myLabel = [[UILabel alloc] init]; 
[myLabel setText:@"text1"]; 
[myLabel setTag:1]; 
[stackView addArrangedSubview:myLabel]; 

myLabel = [[UILabel alloc] init]; 
[myLabel setText:@"text2"]; 
[myLabel setTag:2]; 
[stackView addArrangedSubview:myLabel]; 
+0

上記のコードを使って 'UIStackView'のラベルを見ることができますか? –

+0

はい、しかし、グラデーションの背景なしでラベルを見ることができます。 – Jeavy

答えて

0

問題はラベルの境界にあるようです。次のコードは、UIStackViewを追加し、グラデーション付きのいくつかのUILabelsを追加します。

const int STACK_WIDTH = 200; 
const int NUM_LABELS = 3; 
const int LABEL_WIDTH = STACK_WIDTH/NUM_LABELS; 

UIStackView* stack = [[UIStackView alloc] initWithFrame:CGRectMake(0, 0, STACK_WIDTH, 100)]; 
stack.axis = UILayoutConstraintAxisHorizontal; 
stack.distribution = UIStackViewDistributionFillProportionally; 
stack.alignment = UIStackViewAlignmentLeading; 
stack.spacing = LABEL_WIDTH; 
stack.backgroundColor = [UIColor greenColor]; 
[self.view addSubview:stack]; 

for(int i = 0; i < NUM_LABELS; i++){ 
    UIView* myLabelView = [[UIView alloc] initWithFrame:CGRectMake(i * LABEL_WIDTH, 0, LABEL_WIDTH, stack.frame.size.height)]; 

    CAGradientLayer *gradient = [CAGradientLayer layer]; 
    gradient.frame = myLabelView.bounds; 
    gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor yellowColor]CGColor], (id)[[UIColor grayColor]CGColor], nil]; 
    gradient.startPoint = CGPointMake(0, 0); 
    gradient.endPoint = CGPointMake(1, 0); 
    [myLabelView.layer addSublayer:gradient]; 

    UILabel* myLabel = [[UILabel alloc] initWithFrame:myLabelView.bounds]; 
    myLabel.text = [NSString stringWithFormat:@"label: %d", i]; 
    [myLabelView addSubview:myLabel]; 

    [stack addArrangedSubview:myLabelView]; 
} 
+0

このようにすると、UILabelのテキストはグラデーションで覆われたままになります。だからこそ、私は新しいUILabelを、他のUILabelのサブビューとして追加することを使用しています - この投稿で提案されているように:http://stackoverflow.com/questions/4850149/adding-a-cggradient-as-sublayer-to-uilabel-hides-the-テキストのラベル – Jeavy

+0

はい私の間違い、私は私の答えを編集します - あなたはまだ問題がありますか? – bradkratky

+0

はい、私はまだこの問題があります。 – Jeavy

関連する問題