Ios 按钮和自动布局

Ios 按钮和自动布局,ios,uibutton,autolayout,Ios,Uibutton,Autolayout,我想建立这样的接口: 禁用自动布局后,我成功地创建了这6个按钮,并根据屏幕高度通过代码对其进行了良好的调整。但是,当禁用自动布局时,所有其他控制器都会变得“混乱”,因此我尝试在启用自动布局的情况下创建/调整这些按钮。在启用自动布局的情况下,无法实现此类接口。我的问题是,在自动布局启用的情况下,是否有任何技巧和解决方案来调整这6个按钮?或者可能有一个图书馆?我真的累坏了。 感谢您的帮助。使用autolayout,您肯定希望将这六个视图包装到另一个UIView中,以防止按钮和其他视图之间的布局交互

我想建立这样的接口:


禁用自动布局后,我成功地创建了这6个按钮,并根据屏幕高度通过代码对其进行了良好的调整。但是,当禁用自动布局时,所有其他控制器都会变得“混乱”,因此我尝试在启用自动布局的情况下创建/调整这些按钮。在启用自动布局的情况下,无法实现此类接口。我的问题是,在自动布局启用的情况下,是否有任何技巧和解决方案来调整这6个按钮?或者可能有一个图书馆?我真的累坏了。
感谢您的帮助。

使用autolayout,您肯定希望将这六个视图包装到另一个UIView中,以防止按钮和其他视图之间的布局交互。如果UIView有固定的高度和宽度,可能就这么简单。

我知道你找到了答案,但我还是会发布我的,因为它使用了不同的方法。当6个按钮之间存在如此多的依赖关系时,在IB(iOS 6)中尝试获得正确的约束是困难的(因为系统在IB中为您添加了约束),所以我在代码中做到了这一点。我这样做的方式是,按钮以任何大小的屏幕或任何方向占据整个屏幕,而无需检查屏幕大小:

@interface ViewController ()
@property (strong,nonatomic) NSMutableDictionary *viewsDict;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.viewsDict = [NSMutableDictionary dictionary];
    for (int i=1; i<7; i++) {
        UIButton *b = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        [b setTitle:[NSString stringWithFormat:@"Button%d",i] forState:UIControlStateNormal];
        [b setTranslatesAutoresizingMaskIntoConstraints:NO];
        [self.viewsDict setObject:b forKey:[NSString stringWithFormat:@"b%d",i]];
        [self.view addSubview:b];
    }

    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[b1][b2(==b1)]|" options:0 metrics:nil views:self.viewsDict]];
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[b3][b4(==b3)]|" options:0 metrics:nil views:self.viewsDict]];
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[b5][b6(==b5)]|" options:0 metrics:nil views:self.viewsDict]];
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[b1][b3(==b1)][b5(==b1)]|" options:0 metrics:nil views:self.viewsDict]];
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[b2][b4(==b2)][b6(==b2)]|" options:0 metrics:nil views:self.viewsDict]];
}
@界面视图控制器()
@属性(强,非原子)NSMutableDictionary*viewsDict;
@结束
@实现视图控制器
-(无效)viewDidLoad{
[超级视图下载];
self.viewsDict=[NSMutableDictionary];

对于(int i=1;i调整是什么?@MaxMacLeod:每个按钮的高度为screen_height/3,宽度为screen_width/2。“在启用自动布局的情况下,无法实现此类界面”--当然有。自动布局可以做任何事情,而且比支柱和弹簧做得更多。你到底想实现什么布局?这6个按钮应该占据整个屏幕吗?你想让它们调整屏幕大小?旋转吗?@rdelmar:这6个按钮之间必须有0边距(如上图所示),是的,它们占据了整个屏幕。我的问题是正常(非视网膜屏幕)一切正常,当我换到3.5或4英寸屏幕时,它们是相关的,但我在底部有一个白边。问题是如何定义屏幕大小函数的约束。@rdelmar:非视网膜屏幕的高度是150,如何将它们换到180(或190)在视网膜屏幕中。我将所有按钮的高度和宽度限制配置为相等。你想说我在基本UIView中添加了UIView吗?老实说,我发现的答案在100%时对我没有帮助,我总是面临一个问题。我会尝试你的解决方案。它奏效了!但是,你能给我解释一下代码吗?
constraintsWithVisualFormat
。非常感谢。@Andronienn,这需要花很多时间来解释。如果您有具体问题,我可以回答。否则,我建议您观看有关该主题的3个WWDC 2012视频。此外,文档还包括视觉格式语言的语法。谢谢您的回答,它工作得很好,但是,我出于某种原因需要与IB合作:/。@Andronienn,为什么?那么祝你好运,这真的很痛苦。不过我认为在iOS 7中情况会更好。