2

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

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

调光视图占据整个屏幕

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

搜索结果表格视图正确调整大小

调光视图也被调整大小

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

controller.searchResultsTableView.frame = myFrame;

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

4

1 回答 1

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 实例添加到您的视图中,则需要进一步区分(您可以使用标签来帮助确定哪些是您的)。

于 2012-10-11T04:22:10.493 回答