隐藏搜索栏视图后更新视图的顶部空间约束

时间:2015-04-08 13:22:44

标签: ios ios7 ios8 autolayout nsautolayout

我有自定义UIView和UISearchBar,它们作为视图控制器视图上的子视图放置。

在某些情况下,我需要隐藏搜索栏视图,然后我想调整自定义视图的大小。所以,让我们说搜索栏有44磅的高度。如果它在顶部可见,那么我的自定义视图应该以y = 44开头。但如果我将搜索栏设置为隐藏,那么我的自定义视图的y位置应该等于0.

我使用故事板并设置所有约束,我想立即更新连接到顶部布局指南的顶部空间约束。默认情况下它等于44磅。但是当我隐藏我的搜索栏时,我希望将顶部空间设置为0并将自定义视图的高度增加44磅。

我想自定义视图的所有子视图都会自动更新。

这是视图在视图控制器的self.view上的位置:

***************
**search bar***
***************
**custom view**
***************

隐藏搜索栏后,它应该如下所示,并完全覆盖superview:

***************
**           **
**custom view**
**           **
***************

3 个答案:

答案 0 :(得分:4)

如果您想要隐藏搜索栏,请创建高度限制和顶部空间约束的出口,如下所示。

@property (strong, nonatomic) IBOutlet NSLayoutConstraint *searchBarTopSpaceHeight;
@property (strong, nonatomic) IBOutlet NSLayoutConstraint *searchBarHeight;

并将这些值设置为0,如

_searchBarTopSpaceHeight.constant = 0;

_searchBarHeight.constant = 0;

尝试使用该解决方案。

答案 1 :(得分:1)

  1. 创建与搜索栏大小相同的视图,并将搜索栏放在里面。将顶部约束设置为等于superview的顶部。
  2. 创建自定义视图并将其顶部约束设置为等于第一个视图底部。
  3. 向第一个视图添加高度约束,并创建其余约束。
  4. 要隐藏搜索栏,请以编程方式将第一个视图高度约束设置为0,这将使自定义视图顶部移动到超级视图的顶部。这也可以动画。

答案 2 :(得分:0)

应该是这样的 http://i.stack.imgur.com/dvheh.png

蓝色视图应该具有顶视图的约束和紫色视图的底部约束。不要忘记为蓝色视图制作高度约束。

- (IBAction)test:(id)sender {
    [UIView animateWithDuration:0.5 animations:^{
        self.heightConstraint.constant = 0;
        [self.view layoutIfNeeded];
    }];
}