Вертикальное центрирование текста в CATextLayer - PullRequest
3 голосов
/ 03 марта 2011

Я пытаюсь использовать противопоказание для вертикального центрирования текста в моем CATextLayer, но ограничение, похоже, ничего не делает.Неправильно ли настроено ограничение или есть какой-то другой способ, которым я должен что-то делать для центрирования текста по вертикали?

CATextLayer *label = [[CATextLayer alloc] init];
NSRect labelRect;
labelRect.origin.x = 20;
labelRect.origin.y = 0;
labelRect.size.width = width - 40;
labelRect.size.height = height;
[label setFont:@"Helvetica-Bold"];
[label setFontSize: fontSize];  
[label setFrame:labelRect];
[label setString:[NSString stringWithFormat:@"Menu Item %d", i]];
[label setAlignmentMode:kCAAlignmentLeft];
[label setForegroundColor:whiteColor];

label.layoutManager = [CAConstraintLayoutManager layoutManager];
[label addConstraint:[CAConstraint
                      constraintWithAttribute:kCAConstraintMidY
                      relativeTo:@"superlayer"
                      attribute:kCAConstraintMidY]];
[label setNeedsLayout];
[menuItemLayer addSublayer:label];

1 Ответ

4 голосов
/ 08 марта 2011

Чтобы ограничения слоя работали, суперслой слоя должен иметь layoutManager.Итак, вам нужно будет сделать menuItemLayer.layoutManager = [CAConstraintLayoutManager layoutManager];

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

...