iOS7中UISearchDisplayController 与UISearchBar结合使用时,有时候会出现搜索框获得焦点时,阴影遮盖部分挡住了搜索框,影响用户使用,如下图
API中没有阴影图层的接口,尝试分析解决
1、使用Reveal,查找遮盖图层,发现为_UISearchDisplayControllerDimmingView
2、找到该图层,修改对应的frame,通过上图可以发现dimmingview与searchResultsTableView为同一视图的子图层。
1
|
- (
void
)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller<br>{
|
1
2
3
4
5
6
7
8
|
for
(UIView * v in controller.searchResultsTableView.superview.subviews)
{
NSLog
(@
"%@"
,[v
class
]);
if
([v isKindOfClass:
NSClassFromString
(@
"_UISearchDisplayControllerDimmingView"
)])
{
v.frame = CGRectMake(0,20,320,400);
//
}
}
|
1
|
<br>} <br>
|
3、通过以上代码修改,遮罩图层没有在挡住搜索框了,但操作搜索框,还是发现搜索框的下区域不能获取焦点,Cancel按钮不方便使用。
4、通过上个图可以看到虽然遮罩层下去了,但还是有个图层在挡住,左边列表该图层显示为searchResultsTableView的父视图,再次修改代码。
- (void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller { controller.searchResultsTableView.superview.bounds = CGRectMake(0,22,320,400); for(UIView * v in controller.searchResultsTableView.superview.subviews) { NSLog(@"%@",[v class]); if([v isKindOfClass:NSClassFromString(@"_UISearchDisplayControllerDimmingView")]) { v.frame = CGRectMake(0,20,320,400); // } } }
5、搜索框可以正常使用。
6、同样,如果需要调整searchResultsTableView的frame,在追加下面的代码
- (void)searchDisplayController:(UISearchDisplayController *)controller didShowSearchResultsTableView:(UITableView *)tableView { tableView.frame =CGRectMake(0, 20, 320, 480-64-44); }