界面场景
模仿拨号界面,整个界面由三部分组成
- 搜索框
- 通话记录列表
- 拨号盘
隐藏控件的需求
当在拨号盘中点击数字时
- 隐藏搜索框
- 通话记录列表显示通讯录筛选结果
- 通话记录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);
}];
思路
- 从界面中移除搜索框,调整通话记录列表的top位置
- 将搜索框的高度改为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);
}];
}