看起来最好的方法是使用CATextLayer的setConstraints方法,并在我想更改垂直对齐时替换所有约束。现在我的代码是这样的:
// Define the constraints for the class in the .h
@interface LayerView : NSView {
CATextLayer *textLayer;
CAConstraint *verticalConstraint;
CAConstraint *horizontalConstraint;
CAConstraint *widthConstraint;
}
- (IBAction)alignTextToTop:(id)sender;
@end
@implementation LayerView
- (id)initWithFrame:(NSRect)frameRect
{
id view = [super initWithFrame:frameRect];
horizontalConstraint = [CAConstraint constraintWithAttribute:kCAConstraintMidX relativeTo:@"superlayer" attribute:kCAConstraintMidX];
widthConstraint = [CAConstraint constraintWithAttribute:kCAConstraintWidth relativeTo:@"superlayer" attribute:kCAConstraintWidth];
verticalConstraint = [CAConstraint constraintWithAttribute:kCAConstraintMidY relativeTo:@"superlayer" attribute:kCAConstraintMidY];
[textLayer setConstraints:[NSArray arrayWithObjects:verticalConstraint, horizontalConstraint, widthConstraint, nil]];
return view;
}
// Update the constraints using setConstraints
- (IBAction)alignTextToTop:(id)sender
{
verticalConstraint = [CAConstraint constraintWithAttribute:kCAConstraintMaxY relativeTo:@"superlayer" attribute:kCAConstraintMaxY];
[textLayer setConstraints:[NSArray arrayWithObjects:verticalConstraint, horizontalConstraint, widthConstraint, nil]];
}
@end