我有一份我想要定位的观点列表。我有两种状态,其中视图的位置应该不同。
我是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.view
是superview
s的TabBarItem
。
现在我希望能够使用AutoLayout将所有TabBarItem
移动到完全不同的位置(可能需要不同的约束)。
我该如何处理?我可以识别约束并将其删除以添加另一个约束吗?
如上所述,我是AutoLayout的新手,并且真的想以正确的方式做到这一点: - )
答案 0 :(得分:1)
我通过两个NSMutableArray
来实现这一目标:一个用于第一个位置所需的所有约束,另一个用于另一个位置所需的所有约束。通过这样做,我能够从第一个列表中删除活动约束,然后从第二个列表中添加新约束。
不是很优雅,但我找不到其他办法。