1

我现在花了很多时间来弄清楚 - 自动布局以及如何使用它,但还没有找到关于如何解决这个问题的答案。

我的问题是我想在 iPhone 5 和之前的显示器上均匀地对齐例如 5 个垂直放置的 UIButton,但是有没有办法使用 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 回答