ios – 当使用beginUpdates / endUpdates时,UISearchBar从tableHeaderView消失

前端之家收集整理的这篇文章主要介绍了ios – 当使用beginUpdates / endUpdates时,UISearchBar从tableHeaderView消失前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个表视图控制器与一个UISearchController设置UISearchBar作为tableView.tableHeaderView.更新搜索结果时,我使用beginUpdates和endUpdates和相关方法更新表视图的数据.

这使搜索栏消失; tableHeaderView设置为与搜索栏大小相同的空的通用UIView.如果我只是使用reloadData而不是整个beginUpdates / endUpdates过程,一切都很好.

表视图控制器嵌入在常规视图控制器中;没有导航控制器.这是整个执行表视图控制器所必需的重现问题:

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
    self.searchController.searchResultsUpdater = self;
    self.searchController.dimsBackgroundDuringPresentation = NO;

    self.tableView.tableHeaderView = self.searchController.searchBar;
}

- (void)updateSearchResultsForSearchController:(UISearchController *)searchController
{
    [self.tableView beginUpdates];
    [self.tableView endUpdates];
}

为什么这会导致搜索栏被空白的视图所替代,如何才能避免?

解决方法

当您首次点击UISearchController的searchBar时,searchBar的动画需要大约0.5秒.但是由委托方法立即调用self.tableView.endUpdates(),动画被中断.
searchBar卡在动画的中间,你看不到它的UI:

一个解决方法是检查searchBar是否在动画中,并在其进入​​时延迟self.tableView.endUpdates().

func updateSearchResultsForSearchController(searchController: UISearchController){
    self.tableView.beginUpdates()
    //Do some updates

    if !searchController.searchBar.showsCancelButton{
        self.tableView.performSelector(#selector(UITableView.endUpdates),withObject: nil,afterDelay: 1)

    }else{
        self.tableView.endUpdates()
    }
}

猜你在找的iOS相关文章