2012-05-22 62 views
2

在我的iPad应用程序中,我有一个UITableView。表格的框架尺寸小于屏幕尺寸,所以为了使搜索功能看起来不错,我必须调整searchResultTableView的框架以适合我的TableView。我在我的UISearchDisplayDelegate的-searchDisplayController:willShowSearchResultsTableView:方法中执行此操作。UISearchDisplayController更改灰色视图框架

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

dimming view takes whole screen

当我开始输入搜索字符串或清晰的文本字段我searchResultsTableView适当调整大小,并一切正常,因为它应该:

search results tableview is resizes properly

dimming view is resized as well

我试图改变内部-searchDisplayControllerWillBeginSearch searchResultsTableView帧:方法USI ng此行

controller.searchResultsTableView.frame = myFrame; 

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

+0

我有同样的问题,你找到任何解决方案吗? –

+0

解决! 参考此链接 http://stackoverflow.com/questions/5473579/uisearchdisplaydelegate-how-to-remove-this-opaque-view –

回答

1

我还需要更改调光视图的框架,但出于不同的原因。在我的情况下,我创建了一个UISearchDisplayController和UISearchBar编程在一个普通的UIViewController而不是一个UITableViewController。我还使用了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实例添加到您的视图中,则可能需要进一步的区分(您可以使用标签来帮助确定哪些是您的)。

相关问题