1

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

4

2 に答える 2

1

setTranslatesAutoresizingMaskIntoConstraints:発生しているエラーは、子ビューを呼び出して自動レイアウトを選択していないためです。

NSButton *pb = [[NSButton alloc] initWithFrame: bframe];
[pb setTranslatesAutoresizingMaskIntoConstraints:NO];
于 2013-04-06T00:26:58.410 に答える