2011-03-03 63 views
3

我想在我的CATextLayer中使用一個約束來垂直居中文本,但是這個約束似乎沒有做任何事情。約束設置是錯誤的還是有其他方式我應該做的事情垂直居中文本?在一個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]; 

回答

4

要使圖層的約束起作用,圖層的超層需要有一個layoutManager。所以,你需要做menuItemLayer.layoutManager = [CAConstraintLayoutManager layoutManager];

該標籤不需要它自己的layoutManager(除非它有應用了約束的子層),所以你可以擺脫label.layoutManager = ...行。