UISearchDisplayController更改变暗的视图框架

时间:2012-05-22 21:54:11

标签: ios uitableview uisearchdisplaycontroller

在我的iPad应用程序中,我有一个UITableView。 Table的帧大小小于屏幕大小,因此为了使搜索功能看起来不错,我必须调整searchResultTableView的框架以适合我的TableView。我在我的UISearchDisplayDelegate的-searchDisplayController中执行它:willShowSearchResultsTableView:方法。

除了调光视图外,一切正常。当我开始搜索时,调光视图的宽度等于屏幕宽度:

dimming view takes whole screen

当我开始输入搜索字符串或清除文本字段时,我的searchResultsTableView正确调整大小,一切正常:

search results tableview is resizes properly

dimming view is resized as well

我尝试使用此行更改searchResultsTableView框架内的-searchDisplayControllerWillBeginSearch:方法

controller.searchResultsTableView.frame = myFrame;

但它不起作用。除了实现我自己的搜索显示控制器之外的任何建议吗?

1 个答案:

答案 0 :(得分:1)

我还需要更改调光视图的框架,但原因不同。在我的例子中,我在一个常规的UIViewController而不是UITableViewController中以编程方式创建了一个UISearchDisplayController和UISearchBar。我也在使用MFSideMenu,这增加了问题的复杂性。最终发生的事情是调光视图最初处于正确的位置,但是下次搜索被清除时,调光视图向左和向上移动了恰好一半的尺寸。给定UISearchDisplayController,你可以找到这样的调光视图。

for(UIView * v in controller.searchContentsController.view.subviews)
{
    if([v isMemberOfClass:[UIControl class]])
    {
        v.frame = newFrame; //This frame should account for the UISearchBar
    }
}

要处理初始错误帧,您应该在此委托方法中更改它:

- (void) searchDisplayController:(UISearchDisplayController *)controller didShowSearchResultsTableView:(UITableView *)tableView;

要在任何后续清除中处理错误的帧,您应该在此委托方法中更改它:

- (void) searchDisplayController:(UISearchDisplayController *)controller didHideSearchResultsTableView:(UITableView *)tableView;

注意:此解决方案贯穿searchContentsController的子视图,这是我使用isMemberOfClass而不是isKindOfClass(UIButton是UIControl的子类)的原因之一。如果您在视图中添加了一个UIControl实例,则需要进一步区分(您可以使用标签来帮助确定哪些是您的)。