TiM*_*TiM 27 uitableview uiscrollview uisearchbar ios game-center
在游戏中心的UITableViews中有这个很酷的功能,以及它们顶部的搜索栏.与将搜索栏放在表标题视图中的应用程序(因此它计为标准表格单元格)不同,它似乎是用螺栓固定到它上面的父导航栏.因此,当滚动表格时,搜索栏确实会移动,但如果您在表格的边界上滚动,搜索栏将永远不会停止触摸导航栏.
有谁知道这可能是怎么做的?我想知道Apple是否可能将搜索栏和表放在父滚动视图中,但我想知道它是否可能比这更简单.
fri*_*erg 28
鲍勃的答案是相反的:它应该是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;
}
Run Code Online (Sandbox Code Playgroud)
您可以将searchBar放在表头中,并为tableView实现 - (void)scrollViewDidScroll:(UIScrollView*)scrollView委托方法.做这样的事情应该有效:
-(void) scrollViewDidScroll:(UIScrollView *)scrollView {
searchBar.frame = CGRectMake(0,MAX(0,scrollView.contentOffset.y),320,44);
}
Run Code Online (Sandbox Code Playgroud)
如果您使用了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
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
36239 次 |
| 最近记录: |