我有一个有标题的视图。此标题有4个视图,在右侧显示图像。我称它们为图标,因为它们每个都显示或绘制一个字形。根据数据,可以隐藏图标2,3或4,给出六种可能的组合。 即使隐藏起来,每个看不见的图标都占据着它的空间,给出了一个或多个“洞”。在可视化中。 这就是我现在正在使用的。
[header addSubview:_label];
[header addSubview:_icon1];
[header addSubview:_icon2];
[header addSubview:_icon3];
[header addSubview:_icon4];
NSDictionary *headerViewDict = NSDictionaryOfVariableBindings(_label, _icon1, _icon2, _icon3, _icon4);
[header addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-2-[_label]-0-[_icon4(>=0,14)]-1-[_icon3(>=0,14)]-1-[_icon2(>=0,14)]-1-[_icon1(14)]-2-|" options:nil metrics:nil views:headerViewDict]];
[header addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_label]|" options:nil metrics:nil views:headerViewDict]];
[header addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_icon1]|" options:nil metrics:nil views:headerViewDict]];
[header addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_icon2]|" options:nil metrics:nil views:headerViewDict]];
[header addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_icon3]|" options:nil metrics:nil views:headerViewDict]];
[header addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_icon4]|" options:nil metrics:nil views:headerViewDict]];
我刚读过(https://stackoverflow.com/a/18066138/1360888)要解决这个问题,有两种可能性过度约束或改变常数。 我对autolayout很新,我总是使用Visual Format Language(因为我只使用代码构建我的视图),所以我不明白如何将该解决方案应用到我的案例中。
如何为我的视图创建流畅的布局?
注意:在我的应用程序中,我有很多视图,例如标题同时可见,因此性能很重要。
答案 0 :(得分:0)
我要做的是创建一个图标数组(如你所说,UIImageViews?)。然后根据您的数据更新数组的内容。
在ViewWillLayoutSubviews
上删除约束:
//Clear the constraints
for (NSLayoutConstraint *constraint in [self.view constraints]) {
[self.view removeConstraint:constraint];
}
添加约束:
if (myCustomView) {//constraintsWithVisualFormat does not support handling nil
//Add constraints for myCustomView Here
}
ViewWillLayoutSubviews
/**
* Update the constraints before laying subviews
*
*/
- (void) viewWillLayoutSubviews
{
[super viewWillLayoutSubviews];
//Remove constraints
//Set new constraints
}