4

如果您仔细观察UISearchBara的底部UISearchDisplayController,您会注意到它有一个微妙的阴影。这个阴影不适合我目前正在开发的应用程序的设计,所以我试图删除/隐藏它。不幸的是,我还没有成功。

在我研究这个阴影的过程中,我发现它不是. UISearchBar当我从它的超级视图中删除UISearchDisplayController's时,阴影仍然可见。UISearchBar- (void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller

阴影原来是 的一部分UISearchDisplayController's searchResultsTableView:当我隐藏 时searchResultsTableView,阴影消失了。但是,我无法追踪其图层上有阴影的视图。我尝试递归遍历所有可见视图(从 [[UIApplication sharedApplication] 窗口] 开始),然后隐藏每个视图的投影并将其clipsToBounds属性设置为 YES,这也没有产生预期的结果。

有任何想法吗?

4

2 回答 2

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];
    }
}
于 2012-11-30T13:37:27.087 回答
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;
        }
    }
}
于 2013-02-18T01:27:13.380 回答