1

自動レイアウトとその使用方法を理解するのに多くの時間を費やしましたが、この問題を解決する方法についての答えは見つかりませんでした。

私の問題は、たとえば 5 つの垂直に配置された UIButtons を iPhone 5 とそれ以前のディスプレイの両方で均等に配置したいということですが、Interface Builder でそれを行う方法はありますか、それともコードで行う必要がありますか。画面の解像度 (3.5 インチと 4 インチのディスプレイ) に対して、ボタン間の垂直距離を均等にしたい場合。

ボタン間に垂直方向の制約を追加しようとしましたが、4 インチ ディスプレイが選択されている場合、レイアウトの上部または下部にギャップが追加されるだけです。

もちろん、単純なものが欠けていますが、理解できません。

4

1 に答える 1

1

これを機能させる唯一の方法は、ボタンとラベルが画面上のすべての垂直方向のスペースを占めるように、ラベル (タイトルがないため、見えない) を端とボタンの間に配置することです。ボタンには固有のサイズがありますが、ラベルには固有のサイズがないため、スペースを正しく埋めるために拡大または縮小します。

-(void)viewDidLoad {
    [super viewDidLoad];

    NSMutableDictionary *viewsDict = [NSMutableDictionary dictionary];
    NSArray *titles = @[@"Button 1",@"Button 2",@"Button 3",@"Button 4",@"Button 5"];
    for (int i=1; i<6; i++) {
        UIButton *b = [UIButton buttonWithType:1];
        [b setTitle:titles[i-1] forState:UIControlStateNormal];
        [b setTranslatesAutoresizingMaskIntoConstraints:NO];
        [viewsDict setObject:b forKey:[NSString stringWithFormat:@"b%d",i]];
    }

    for (int i=1; i<7; i++) { // labels for spacing
        UILabel *l = [[UILabel alloc ]init];
        [l setTranslatesAutoresizingMaskIntoConstraints:NO];
        [viewsDict setObject:l forKey:[NSString stringWithFormat:@"l%d",i]];
    }

    for (id obj in viewsDict.allKeys) 
        [self.view addSubview:viewsDict[obj]];

    NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[l1][b1][l2(==l1)][b2][l3(==l1)][b3][l4(==l1)][b4][l5(==l1)][b5][l6(==l1)]|"
                                                                   options:NSLayoutFormatAlignAllLeading
                                                                   metrics:nil
                                                                     views:viewsDict];


    NSArray *constraints2 = [NSLayoutConstraint constraintsWithVisualFormat:@"|-100-[b1]"
                                                                   options:NSLayoutFormatAlignAllLeading
                                                                   metrics:nil
                                                                  views:viewsDict];


    [self.view addConstraints:constraints];
    [self.view addConstraints:constraints2];
}

これにより、すべてのボタンが左端から 100 ポイントの位置に配置され、ボタン間の間隔が等しくなります。これにより、画面サイズと回転が調整されます。

于 2013-02-24T19:34:09.303 に答える