iOS隐藏控件并让后面的控件自动补位

界面场景

模仿拨号界面,整个界面由三部分组成

  • 搜索框
  • 通话记录列表
  • 拨号盘

隐藏控件的需求

当在拨号盘中点击数字时

  • 隐藏搜索框
  • 通话记录列表显示通讯录筛选结果
  • 通话记录top顶到原搜索框top位置

界面初始布局

搜索框在最上面,下面紧跟着通话记录列表

    [self.searchBar mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.mas_equalTo(self.view.mas_top).offset(5);
        make.left.mas_equalTo(self.view.mas_left).offset(10);
        make.right.mas_equalTo(self.view.mas_right).offset(-10);
        make.height.mas_equalTo(40);
    }];
    
    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.mas_equalTo(self.searchBar.mas_bottom).offset(5);
        make.left.mas_equalTo(self.view.mas_left);
        make.right.mas_equalTo(self.view.mas_right);
        make.bottom.mas_equalTo(self.view.mas_bottom);
    }];

思路

  1. 从界面中移除搜索框,调整通话记录列表的top位置
  2. 将搜索框的高度改为0,调整通话记录列表的top位置(因为搜索框和通话记录列表都有offset)

实践

1.思路1,隐藏搜索框时,通话记录列表的top位置未发生改变(猜测可能未触发布局刷新)
2.思路2可以实现,且代码量较少,不用在显示的时候重新添加搜索框,只需要更新Constraints即可

隐藏和显示设置

#pragma mark - 隐藏搜索框
- (void) hideSearchBar {
    [self.searchBar mas_updateConstraints:^(MASConstraintMaker *make) {
         make.height.mas_equalTo(0);
    }];
    
    [self.tableView mas_updateConstraints:^(MASConstraintMaker *make) {
         make.top.mas_equalTo(self.searchBar.mas_bottom).offset(0);
    }];
}

#pragma mark - 显示搜索框
- (void) showSearchBar {
    [self.searchBar mas_updateConstraints:^(MASConstraintMaker *make) {
         make.height.mas_equalTo(40);
    }];
    
    [self.tableView mas_updateConstraints:^(MASConstraintMaker *make) {
         make.top.mas_equalTo(self.searchBar.mas_bottom).offset(5);
    }];
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。