objective-c - 在 CATextLayer 中垂直居中文本

标签 objective-c macos calayer

我正在尝试使用约束在我的 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];

最佳答案

要使层的约束起作用,层的超层需要有布局管理器。因此,您需要执行 menuItemLayer.layoutManager = [CAConstraintLayoutManager layoutManager];

标签不需要自己的布局管理器(除非它有应用了约束的子层),所以你可以去掉 label.layoutManager = ... 行。

关于objective-c - 在 CATextLayer 中垂直居中文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5178816/

相关文章:

ios - 在 drawRect 中将文本放在其他 CALayer 之上

ios - 为什么在为 subview 添加图层蒙版时需要调用 layoutIfNeeded()?

ios - 如何检测两个UIView的边框是否接触?

ios - 如何找到 UIImage 瓶颈

iphone - UIScrollView 通过触摸垂直滚动并以编程方式水平滚动

ios - 想要列出 iOS(和 Mac)的 Xcode 宏和预处理器符号

iphone - 来自 UITextField TextDidChangeNotification 的文本

macos - 允许在 OS X 和 Windows VirtualBox 之间复制粘贴

c - 可执行文件仅在终端 C Allegro 打开时有效

ios - CALayer 中的平滑动画洞?