wst*_*str 6 search objective-c uitableview uitextfield ios
我有一个UITableView,我目前正在努力在顶部添加一个自定义搜索栏,其中包含一个内部有UITextField的UIView.作为iOS应用程序的标准,搜索栏应该只在表格视图滚动到顶部时才可见 - 向下滚动它应该与其他单元格一起从屏幕上消失.
但是,我无法找到实现这种效果的方法.如果我将搜索栏放在表格视图的顶部,它将覆盖其下方的单元格.如果我将它放在桌面视图上方50个像素,则用户无法选择它,因为当用户从屏幕上松开手指时它将自动消失.
有人可以请教我如何实现这种效果?
dar*_*iaa 21
通常您只是UISearchBar用作tableViewHeader表格视图.如果您希望在用户进入屏幕时隐藏它(就像在大多数原生应用程序中一样),您可以设置contentOffset为tableViewin viewWillAppear.
而且我很确定他们是如何做到的.如果你仔细想想它就是它的tableHeaderView意思.
尝试这样的事情:
- (void)viewDidLoad
{
[super viewDidLoad];
UISearchBar *searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0., 0., 320., 44.)];
self.tableView.tableHeaderView = searchBar;
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
CGPoint contentOffset = self.tableView.contentOffset;
contentOffset.y += CGRectGetHeight(self.tableView.tableHeaderView.frame);
self.tableView.contentOffset = contentOffset;
}
Run Code Online (Sandbox Code Playgroud)
请注意,在搭载iOS 7,你不应该仅仅设置contentOffset你的tableView来CGPointMake(0., CGRectGetHeight(self.tableView.tableHeaderView.frame)),如果你viewController已经automaticallyAdjustsScrollViewInsets设置YES的,因为它可能不会是CGPointZero在viewWillAppear:
dav*_*ynn 11
@ dariaa的答案更新为Swift 3:
override func viewDidLoad() {
super.viewDidLoad()
let searchBar = UISearchBar(frame: CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 44))
self.tableView.tableHeaderView = searchBar
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
var contentOffset: CGPoint = self.tableView.contentOffset
contentOffset.y += (self.tableView.tableHeaderView?.frame)!.height
self.tableView.contentOffset = contentOffset
}
Run Code Online (Sandbox Code Playgroud)
虽然您可能需要将searchBar设置为属性,但如果您想使用它.