我正在尝试以编程方式将按钮添加到已经在视图中的 NSTextField 下方的视图中。该视图是在 IB 中创建的并使用约束。它是一个 NSTableCellView,但我怀疑在这种情况下会有什么不同。我的代码是这样的:
NSView *previousView = self.pathsField;
for( NSString *path in self.revision.paths )
{
NSButton *pb = [[NSButton alloc] initWithFrame: bframe];
pb.bezelStyle = NSRoundRectBezelStyle;
[self addSubview: pb];
pb.title = path;
[self addConstraint: [NSLayoutConstraint constraintWithItem: pb
attribute: NSLayoutAttributeTop
relatedBy: NSLayoutRelationEqual
toItem: previousView
attribute: NSLayoutAttributeBottom
multiplier: 1 constant: 2.0]];
[buttons addObject: pb];
bframe.origin.y += 20;
previousView = pb;
}
self.pathButtons = buttons;
如果我将 addConstraint 调出,按钮就会毫无怨言地添加(只是不在正确的位置)。通过 addConstraint 调用,我在调试控制台上收到很多关于约束冲突的消息,并且我的一些 IB 创建的约束被破坏。
显然我做错了什么。我希望约束要求新按钮的顶部比前一个视图或按钮的底部低 2 px。看起来这应该不会引起任何冲突,那么我在哪里呢?