既にビューにある 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 ピクセル下にある必要があるという制約があると予想しました。それが衝突を引き起こすべきではないように思われるので、私はどこにいるのでしょうか?