1

プログラムで 2 つの UIView を作成し、Visual Format 言語 Autolayout を実装したいと考えています。両方のビューに NSLayoutFormatAlignAllTop を使用したいと考えています。以下は私のコードです。

-(void)doCodeForWidthAndHeight
{
    UIView *myView = [[UIView alloc] init];
    myView.backgroundColor = [UIColor redColor];
    myView.translatesAutoresizingMaskIntoConstraints = NO;  //This part hung me up
    [self.view addSubview:myView];

    UIView *mySecondView = [[UIView alloc] init];
    mySecondView.backgroundColor = [UIColor greenColor];
    mySecondView.translatesAutoresizingMaskIntoConstraints = NO;  //This part hung me up
    [self.view addSubview:mySecondView];

    NSDictionary *viewsDictionary = @{@"myView":myView,@"mySecond":mySecondView};

    // 1. Create a dictionary of views
    NSArray *constraint_POS_V = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-200-[myView(100)]-[mySecond(100)]" options:0 metrics:nil views:viewsDictionary];

    NSArray *constraint_POS_H = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-20-[myView(40)]-40-[mySecond]-30-|" options:0 metrics:nil views:viewsDictionary];

    NSArray *topMargin = [NSLayoutConstraint constraintsWithVisualFormat:@"[myView]-[mySecond]" options:NSLayoutFormatAlignAllTop metrics:nil views:viewsDictionary];

    [self.view addConstraints:constraint_POS_H];
    [self.view addConstraints:constraint_POS_V];
    [self.view addConstraints:topMargin];
}

これは私の現在のコードの結果であり、結果は正しいですが、ログにいくつかの警告メッセージが表示されます

Pelase は、現在のコードで NSLayoutFormatAlignAllTop オプションを使用する方法を提案しています。ログのエラーは、制約を同時に満たすことができません。おそらく、次のリストの制約の少なくとも 1 つが望ましくないものです。これを試してみてください: (1) 各制約を見て、どれが予期しないものかを把握してみてください。(2) 不要な制約を追加したコードを見つけて修正します。( "", "" )

制約を破って回復を試みます

UIViewAlertForUnsatisfiableConstraints でシンボリック ブレークポイントを作成して、デバッガーでこれをキャッチします。にリストされている UIView の UIConstraintBasedLayoutDebugging カテゴリのメソッドも役立つ場合があります。2016-08-05 20:12:41.763 FamilyApp[12908:242194] 制約を同時に満たすことができません。おそらく、次のリストの制約の少なくとも 1 つが望ましくないものです。これを試してみてください: (1) 各制約を見て、どれが予期しないものかを把握してみてください。(2) 不要な制約を追加したコードを見つけて修正します。( ""、""、"" )

制約を破って回復を試みます

UIViewAlertForUnsatisfiableConstraints でシンボリック ブレークポイントを作成して、デバッガーでこれをキャッチします。にリストされている UIView の UIConstraintBasedLayoutDebugging カテゴリのメソッドも役立つ場合があります。

4

1 に答える 1

2

同時に、ビューが水平方向に隣り合っており、垂直方向に重なっていると言っています。それ無理。

于 2016-08-05T15:34:17.343 に答える