ios - 隐藏 View 后如何更新布局

标签 ios objective-c

在我的基于约束的布局中有 3 个 ImageView,在某些情况下我必须删除第二个 ImageView,我尝试隐藏 ImageView 但问题是 ImageView1ImageView3 并且布局在隐藏其中一个 View 后没有得到更新,我尝试了一些关于堆栈溢出的解决方案但没有得到解决。试过这样的事情

(void)viewDidLoad {

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

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

最佳答案

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

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

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

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

关于ios - 隐藏 View 后如何更新布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50894565/

相关文章:

objective-c - 捕获在 NSTextField 中按下的 "up"和 "down"键

ios - 进入全屏时 iPhone 上的 MPMoviePlayerController 暂停

iphone - 编辑模式后 UITableViewCell 刷新问题

ios - 如何使自动取消选择tableview单元格

ios - xcode/tesseract,使用图片库中的图片

ios - 在 Swift 中将 ImageView 从一个 View Controller 传输到另一个 View Controller

ios - iBeacon 案例 - 触发具有距离限制的 didEnterRegion

iphone - Int 或 NSInteger 作为方法参数的对象。 Objective-C

objective-c - 从概念上讲,这应该如何在 OOP 中构建?

ios - 不使用 Firebase 身份验证的实时数据库的 Firebase 规则