我正在尝试使用自动布局为 Cocoa 中的控件设置动画。
现在,我可以设置[[constraint animator] setConstant:newWidth];
,这很有效。但是我怎样才能得到正确的约束呢?
有了[self constraints]
你可以获得所有约束,在这种情况下我可以选择constraints[0]
,但约束的顺序可能会有所不同。
我怎么能确定我总是有正确的约束?约束在 Interface Builder 中设置。我已经看到您可以向其中添加 IBOutlet,但似乎没有必要。
我的解决方案
谢谢,效果很好。我写了一个小类。
NSView+NSLayoutConstraintFilter.h
#import <Cocoa/Cocoa.h>
@interface NSView (NSLayoutConstraintFilter)
- (NSLayoutConstraint *)constraintForAttribute:(NSLayoutAttribute)attribute;
- (NSArray *)constaintsForAttribute:(NSLayoutAttribute)attribute;
@end
NSView+NSLayoutConstraintFilter.m
#import "NSView+NSLayoutConstraintFilter.h"
@implementation NSView (NSLayoutConstraintFilter)
- (NSArray *)constaintsForAttribute:(NSLayoutAttribute)attribute {
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"firstAttribute = %d", attribute];
NSArray *filteredArray = [[self constraints] filteredArrayUsingPredicate:predicate];
return filteredArray;
}
- (NSLayoutConstraint *)constraintForAttribute:(NSLayoutAttribute)attribute {
NSArray *constraints = [self constaintsForAttribute:attribute];
if (constraints.count) {
return constraints[0];
}
return nil;
}
@end