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

Ios 隐藏搜索栏视图后更新视图的顶部空间约束,ios,ios7,ios8,autolayout,Ios,Ios7,Ios8,Autolayout,我有自定义UIView和UISearchBar,它们作为视图控制器视图上的子视图放置 在某些情况下,我需要隐藏搜索栏视图,然后我想调整自定义视图的大小。假设搜索栏的高度为44磅。如果它在顶部可见,那么我的自定义视图应该以y=44开始。但若我将搜索栏设置为隐藏,那个么我的自定义视图的y位置应该等于0 我使用故事板并设置所有约束,现在我想更新连接到顶部布局指南的顶部空间约束。默认情况下,它等于44磅。但当我隐藏搜索栏时,我希望将顶部空间设置为0,并将自定义视图的高度增加44磅 我认为自定义视图的所有

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

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

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

我认为自定义视图的所有子视图都将自动更新

这是视图放置在视图控制器的self.view上的方式:

***************
**search bar***
***************
**custom view**
***************
隐藏搜索栏后,应如下所示,并完全覆盖superview:

***************
**           **
**custom view**
**           **
***************
  • 创建一个与搜索栏大小相同的视图,并将搜索栏放在内部。将顶部约束设置为superview的顶部
  • 创建自定义视图并将其顶部约束设置为与第一个视图底部相等
  • 向第一个视图添加高度约束,并创建其余约束

  • 若要隐藏搜索栏,请以编程方式将第一个视图高度约束设置为0,这将使自定义视图顶部移动到superview的顶部。这也可以设置动画。

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

    @property (strong, nonatomic) IBOutlet NSLayoutConstraint *searchBarTopSpaceHeight;
    @property (strong, nonatomic) IBOutlet NSLayoutConstraint *searchBarHeight;
    
    然后将这些值设置为0,就像

    _searchBarTopSpaceHeight.constant = 0;
    
    _searchBarHeight.constant = 0;
    

    试试这个解决方案。

    应该是这样的

    蓝色视图应该对顶部视图具有约束,而底部视图应该对紫色视图具有约束。不要忘记为蓝色视图设置高度约束

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

    若我将搜索栏的高度限制设置为0,它会工作吗?或者我需要在任何情况下创建其他视图,并将搜索栏放在那里。还可以设置代码示例如何通过编程将高度约束设置为0?谢谢,您可以跳过第一个视图,直接使用UISearchBar。要以编程方式将高度约束设置为0,请创建NSLayoutConstraint属性并将其连接到在IB中创建的约束。\u searchBarHeight.constant=0;哦,太酷了,我甚至不知道我们可以为约束创造出口)太好了。但也许你也知道如何通过编程实现它。谢谢你的回答)我刚刚设置了_searchBarHeight.constant=0;这对我也有用谢谢