[英]Shifting UIViews with Auto Layout when one ore more views are hidden
我有一个带有标题的视图。 该标题有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 ),要解决此问题,有两种可能性可能是过度约束或更改常量。 我对自动布局非常陌生,并且我一直使用视觉格式语言(因为我仅使用代码构建视图),因此我不理解如何将这种解决方案应用于我的案例。
如何为视图创建流畅的布局?
注意:在我的应用程序中,我有很多视图,例如标头同时可见,因此性能很重要。
我要做的是创建一个图标数组(如您所说的,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
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.