2013-02-24 83 views
1

我现在已经用了很多时间来计算 - 自动布局以及如何使用它,但还没有找到如何解决这个问题的答案。在3.5英寸和4英寸显示器上均匀布置UIButtons

我的问题是,我想对齐例如5在iPhone 5和之前的显示器上均匀地垂直放置UIButtons,但是有没有办法用Interface Builder来完成,还是应该用代码来完成。当我希望按钮之间的垂直距离与屏幕分辨率(3.5“和4”显示)平均。

我已经尝试在按钮之间添加垂直约束,但如果选择了4“显示,这只会在布局的顶部或底部添加一个间隙。

我当然错过了一些简单的东西,但无法弄清楚。

+1

这可能只是帮助你做到这一点的方法之一http://stackoverflow.com/questions/13287047/naming-convention-for-iphone-5-images/13287481#13287481 – Popeye 2013-02-24 18:26:05

+0

@Popeye以什么方式做到这一点回答地址如何根据当前屏幕大小正确地布置一组按钮? – rmaddy 2013-02-24 18:30:44

+1

@rmaddy这就是为什么我没有把它作为答案,因为它只是在那里的一半。本来希望他们能够通过那里自己来解决其他问题。但如果你想让我为你详细说明。该链接提供了如何根据您可以获得的屏幕大小,而不是代码中您希望按钮在屏幕上的布局。我不是自动布局的粉丝,因为它从来不像你想要的那样工作,所以我通常会建议为每个人单独进行布局,直到它正常工作。 – Popeye 2013-02-24 18:34:59

回答

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个点,按钮之间的间距相等。这将调整屏幕大小以及旋转。

+0

任何想法这可能会动态完成?就像你不知道你会展示哪个按钮一样?说,如果一些条件,使得只有按钮1,3,5应该是可见的... – topwik 2013-06-25 22:33:57

相关问题