【问题标题】:Search Display Controller result tableview cannot scroll in iOS 6搜索显示控制器结果表视图无法在 iOS 6 中滚动
【发布时间】:2014-03-28 09:37:26
【问题描述】:

我遇到了一个关于UISearchDisplayController 的表格视图的奇怪错误,它只出现在 iOS 6 中。我刚刚在一个 nib 文件中创建了我的表格视图,然后以编程方式在其上方添加了一个搜索栏和一个搜索显示控制器在表格视图中过滤数据:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.

    self.mpSearchBar = [[MPSearchBar alloc] initWithFrame:CGRectMake(0, 0, 250, 44)];
    self.mpSearchBar.placeholder =@"Card Search";

    self.searchController = [[UISearchDisplayController alloc] initWithSearchBar:self.mpSearchBar contentsController:self];
    self.searchController.delegate = self;
    self.searchController.searchResultsDataSource = self;
    self.searchController.searchResultsDelegate = self;  

    self.resultTableView.delegate = self;
    self.resultTableView.dataSource = self;
    [self.resultTableView reloadData];

}

当我第一次在搜索栏中输入一些查询时,搜索显示控制器过滤数据并且控制器的结果表视图工作正常。但是,当我点击搜索栏中的清除按钮并输入其他内容时,包含新过滤数据集的结果表视图无法再滚动。奇怪的是,当我尝试记录表视图的framecontentSize 时,内容大小高度大于框架高度,因为它应该是:

- (void)searchDisplayController:(UISearchDisplayController *)controller willShowSearchResultsTableView:(UITableView *)tableView {

    tableView.scrollIndicatorInsets = UIEdgeInsetsZero;
    tableView.contentInset = UIEdgeInsetsZero;
    [tableView hideEmptySeparators];

    if (IOS_EQUAL_OR_NEWER_THAN_7){
        tableView.separatorInset = UIEdgeInsetsZero;
    }

    NSLog(@"Frame height %f, Content height %f", tableView.frameHeight, tableView.contentSize.height);
}

这就是我从日志中得到的:

框架高度 504.000000,内容高度 1402.000000

仅当我在 iOS 6 设备上进行测试并且我不知道如何调试此问题时才会发生这种情况。

请提出建议并感谢。

【问题讨论】:

    标签: ios objective-c uitableview uisearchbar uisearchdisplaycontroller


    【解决方案1】:

    原来这是 iOS 6 中UISearchController 的表格视图的一个(不为人知的)已知问题。我的临时解决方案是从willShowSearchResultsTableView 获取contentSize 并以编程方式将其设置为@ 中的表格视图987654324@:

    - (void) viewDidLayoutSubviews
    {
        [super viewDidLayoutSubviews];
        if ([self.searchController isActive]){
            // fix wrong content size due to search bar glitch in iOS 6
            self.searchController.searchResultsTableView.contentSize = newContentSize;
        }
    }
    

    希望这对遇到与我相同问题的人有所帮助。

    【讨论】:

    • newContentSize 到底是什么?您如何确定正确的尺寸?
    • @Gargoyle 假设您的表格视图具有普通样式,您可以使用单元格的高度和表格视图中的单元格总数来获取内容大小。这就是我获得内容大小的方式。
    猜你喜欢
    • 1970-01-01
    • 2015-04-14
    • 1970-01-01
    • 1970-01-01
    • 2016-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多