隐藏视图后如何更新布局

时间:2018-06-17 07:23:31

标签: ios objective-c

在我的基于约束的布局中有3个 ImageView ,我必须在某些情况下删除第二个ImageView,我试图隐藏图像视图但问题是 ImageView1 <之间有空格/ strong>和 ImageView3 并且在隐藏其中一个视图后布局没有得到更新,我尝试了一些在堆栈溢出时给出的解决方案但是没有得到解决。这样的事情

(void)viewDidLoad {

   [super viewDidLoad];
    Imageview2.hidden = YES;
   [self setNeedsLayout]; 
 }

我也试过[self.view LayoutIfNeeded],但没有相同的结果。有没有更好的方法来做到这一点。请帮我解决这个问题。

2 个答案:

答案 0 :(得分:1)

由于它是基于约束的布局,您必须将宽度和高度约束设置为0,同时将前导空格设置为第二个图像视图的0(假设水平布局),如果是垂直,则第二个视图的顶部和底部间距为0.即使隐藏UIImageView,约束仍然有效。

或者,更简单的方法是将所有三个项目放入UIStackView,然后隐藏所需的元素。堆栈视图在尊重autoLayout的同时为您处理所有这些。据我所知,当您隐藏UIStackView

内的对象时,它会将宽度和高度的约束添加为0

我建议您使用UIStackView 如果您的应用仅支持 iOS 9及以上版本

答案 1 :(得分:1)

隐藏你的imageView / View时只设置恒定高度0。

_view.yourImageView.hidden = YES;
_view.yourImageViewConstraintHeight.constant = 0;