如果你仔细观察UISearchBar
中UISearchDisplayController
的底部,你会发现它有一个暗淡的阴影。这个阴影不适合我正在处理的应用程序的设计,所以我试图删除/隐藏它。不幸的是,我还没有成功。
在研究这个投影期间,我发现不是 UISearchBar
的一部分。当我从UISearchDisplayController
的超级视图中删除UISearchBar
的{{1}}时,阴影仍然可见。
阴影原来是- (void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller
UISearchDisplayController's
的一部分:当我隐藏searchResultsTableView
时,阴影消失了。但是,我无法追踪其图层上有阴影的视图。我尝试递归遍历所有可见视图(从[[UIApplication sharedApplication]窗口开始]),然后隐藏每个视图的阴影并将其searchResultsTableView
属性设置为YES,这也没有产生所需的结果。< / p>
有什么想法吗?
答案 0 :(得分:3)
我终于找到了解决方案。由于将clipsToBounds
设置为YES并隐藏层次结构中每个视图的投影不起作用,因此很明显阴影是图像。在遍历searchResultsTableView
的所有子视图并打印其类属性后,我找到了_UISearchBarShadowView
的实例,这显然是罪魁祸首。所以我现在正在做的是找到_UISearchBarShadowView
并将其alpha设置为0.0f。
- (void)searchDisplayController:(UISearchDisplayController *)controller didShowSearchResultsTableView:(UITableView *)tableView
{
[self _findAndHideSearchBarShadowInView:tableView];
}
- (void)_findAndHideSearchBarShadowInView:(UIView *)view
{
NSString *usc = @"_";
NSString *sb = @"UISearchBar";
NSString *sv = @"ShadowView";
NSString *s = [[usc stringByAppendingString:sb] stringByAppendingString:sv];
for (UIView *v in view.subviews)
{
if ([v isKindOfClass:NSClassFromString(s)]) {
v.alpha = 0.0f;
}
[self _findAndHideSearchBarShadowInView:v];
}
}
答案 1 :(得分:1)
接受的答案使用私有API,可能会导致您的应用被拒绝。相反,我只是找到并隐藏任何也是UIImageView的自定义子类的子视图,如下所示:
- (void)searchDisplayController:(UISearchDisplayController *)controller didShowSearchResultsTableView:(UITableView *)tableView
{
for (UIView *view in tableView.subviews) {
if ([view.class isSubclassOfClass:[UIImageView class]]) {
view.alpha = 0.f;
}
}
}