将UISearchBar锁定到像Game Center一样的UITableView的顶部

在Game Center中的UITableViews中有这个很酷的功能,他们在顶部有搜索栏。 与搜索栏放置在表头视图中的应用程序不同(它被视为标准表格单元格),相反,它似乎被螺栓固定到上方的父导航栏中。 所以当滚动表格时,搜索栏确实会移动,但是如果您在表格边界之上滚动,搜索栏永远不会停止触摸导航栏。

有谁知道这可能是怎么完成的? 我想知道苹果是否可以在父滚动视图中同时放置搜索栏和表格,但我想知道它是否可能比这更简单。


Bob的回答是相反的:它应该是MIN(0,scrollView.contentOffset.y)。

此外,为了正确支持调整大小(旋转时会出现这种情况),应重新使用其他帧值。

-(void)scrollViewDidScroll:(UIScrollView *)scrollView 
{
    UISearchBar *searchBar = searchDisplayController.searchBar;
    CGRect rect = searchBar.frame;
    rect.origin.y = MIN(0, scrollView.contentOffset.y);
    searchBar.frame = rect;
}

您可以将searchBar放在表头中并为tableView实现 - (void)scrollViewDidScroll :( UIScrollView *)scrollView委托方法。 做这样的事情应该可行:

-(void) scrollViewDidScroll:(UIScrollView *)scrollView {
    searchBar.frame = CGRectMake(0,MAX(0,scrollView.contentOffset.y),320,44);
} 

如果您使用了searchDisplayController,则可以使用self.searchDisplayController.searchbar访问搜索栏。


在Swift 2.1和iOS 9.2.1中

    let searchController = UISearchController(searchResultsController: nil)

        override func viewDidLoad() {
        /* Search controller parameters */
            searchController.searchResultsUpdater = self  // This protocol allows your class to be informed as text changes within the UISearchBar.
            searchController.dimsBackgroundDuringPresentation = false  // In this instance,using current view to show the results, so do not want to dim current view.
            definesPresentationContext = true   // ensure that the search bar does not remain on the screen if the user navigates to another view controller while the UISearchController is active.

            let tableHeaderView: UIView = UIView.init(frame: searchController.searchBar.frame)
            tableHeaderView.addSubview(searchController.searchBar)
            self.tableView.tableHeaderView = tableHeaderView

        }
        override func scrollViewDidScroll(scrollView: UIScrollView) {
           let searchBar:UISearchBar = searchController.searchBar
           var searchBarFrame:CGRect = searchBar.frame
           if searchController.active {
              searchBarFrame.origin.y = 10
           }
           else {
             searchBarFrame.origin.y = max(0, scrollView.contentOffset.y + scrollView.contentInset.top)

           }
           searchController.searchBar.frame = searchBarFrame
       }
链接地址: http://www.djcxy.com/p/55963.html

上一篇: Locking a UISearchBar to the top of a UITableView like Game Center

下一篇: UITableView won't scroll with a UISearchBar