使用AutoLayout查看两个位置

时间:2014-07-01 11:15:50

标签: ios objective-c autolayout nslayoutconstraint

我有一份我想要定位的观点列表。我有两种状态,其中视图的位置应该不同。

我是AutoLayout的新手,我可能会以错误的方式访问它 - 我对不同的方法持开放态度。

我创建了这个来为第一个州定位TabBarItem : UIView的列表:

NSMutableDictionary* metrics = [@{@"margin": @(TAB_BAR_ITEM_MARGIN)} mutableCopy];

for (int i = 0; i < [self.tabBarItems count]; i++)
{
    TabBarItem* item = [self.tabBarItems objectAtIndex:i];

    if (i > 0)
    {
        TabBarItem* lastAddedItem = [self.tabBarItems objectAtIndex:i - 1];
        NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(item, lastAddedItem);
        NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:[item]-(==margin)-[lastAddedItem]" options:0 metrics:metrics views:viewsDictionary];
        [self.view addConstraints:constraints];
    }
    else
    {
        NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(item);
        NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(>=0)-[item]-(==margin)-|" options:0 metrics:metrics views:viewsDictionary];
        [self.view addConstraints:constraints];
    }

    NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(item);
    NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(==0)-[item]" options:0 metrics:metrics views:viewsDictionary];
    [self.view addConstraints:constraints];
}

self.viewsuperview s的TabBarItem

现在我希望能够使用AutoLayout将所有TabBarItem移动到完全不同的位置(可能需要不同的约束)。

我该如何处理?我可以识别约束并将其删除以添加另一个约束吗?

如上所述,我是AutoLayout的新手,并且真的想以正确的方式做到这一点: - )

1 个答案:

答案 0 :(得分:1)

我通过两个NSMutableArray来实现这一目标:一个用于第一个位置所需的所有约束,另一个用于另一个位置所需的所有约束。通过这样做,我能够从第一个列表中删除活动约束,然后从第二个列表中添加新约束。

不是很优雅,但我找不到其他办法。