在 iOS7 中使用 UISearchBar 将子视图添加到 tableHeaderView 行为不端
Posted
技术标签:
【中文标题】在 iOS7 中使用 UISearchBar 将子视图添加到 tableHeaderView 行为不端【英文标题】:Adding subviews to tableHeaderView with UISearchBar in iOS7 misbehaves 【发布时间】:2014-01-15 17:41:26 【问题描述】:如何在一个 TableHeaderView 中添加两个简单的 UILabel 并保留 ios7 中搜索显示控制器的默认搜索栏行为?
或者,视觉上:
为什么会有这段代码:
UIView *tableHeadView = self.tableView.tableHeaderView;
UILabel *tableHeaderLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 36, 320, 30)];
[tableHeaderLabel setTextAlignment:NSTextAlignmentCenter];
tableHeaderLabel.font = [UIFont fontWithName:@"HelveticaNeue" size:18];
tableHeaderLabel.text = @"Questions"
UILabel *tableHeaderPrononce = [[UILabel alloc] initWithFrame:CGRectMake(0, 50, 320, 30)];
[tableHeaderPrononce setTextAlignment:NSTextAlignmentCenter];
tableHeaderPrononce.font = [UIFont fontWithName:@"HelveticaNeue-Light" size:15];
tableHeaderPrononce.text = @"test test test test";
[tableHeadView addSubview:tableHeaderLabel];
[tableHeadView addSubview:tableHeaderPrononce];
添加到 UITableViewController viewDidLoad 事件(其中包含 UISearchDisplayerController) 在 iOS6 中给出了这个可爱的结果: 而在 iOS7 中这个可怕的可怕结果:
行为: 在正常模式下,我添加的 UILabel 不会显示。当搜索处于活动状态时,UILabels 突然出现在表格单元格的顶部并且不会滚动
此外,我在 iOS 7 中搜索时遇到了崩溃,这在 iOS6 上从未发生过。可能与这段代码无关,但我应该提到这一点。
我尽我所能找到解决此问题的方法,但总是有其他东西中断或消失(主要是 UISearchBar)。
帮助
【问题讨论】:
如果有任何方法可以链接到 github 上的项目,我会为你看看这两个问题。 它不在 git 上,但所有相关代码都在这里 【参考方案1】:看,伙计,在你修改代码或对 iOS7 的行为感到沮丧之前,建议通过苹果提供的UI Transition Guide。
读完这篇你就会知道,为什么分组样式的tableView看起来很烦人,从ios7的角度来看一点也不烦人。 每个组都扩展了屏幕的整个宽度。
此外,如果您通读Search Bar and Scope Bar,则可以控制UISearchBar
的行为
我希望这会有所帮助。如果您需要所有代码,请告诉我们。我们可以提供样品。
这是所需的示例代码将 UISearchBar 添加到 View 而不是 TableViewHeader
将UISearchBar
添加到self.view
searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0.0f,0.0f, 320, 44.0f)];
searchBar.delegate = self;
searchBar.autoresizingMask = UIViewAutoresizingFlexibleWidth;
searchBar.searchBarStyle = UISearchBarStyleMinimal;
[self.view addSubview:searchBar];
将UITableView
添加到self.view
tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 44, self.view.bounds.size.width, self.view.bounds.size.height) style:UITableViewStylePlain];
tableView.delegate = self;
tableView.dataSource = self;
tableView.backgroundColor = [UIColor clearColor];
tableView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight);
[self.view addSubview:tableView];
创建和添加UITableView.tableHeaderView
UILabel *tableHeaderLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320, 15)];
[tableHeaderLabel setTextAlignment:NSTextAlignmentCenter];
tableHeaderLabel.font = [UIFont fontWithName:@"HelveticaNeue" size:18];
tableHeaderLabel.text = @"Questions";
tableHeaderLabel.alpha = 0.9;
UILabel *tableHeaderPrononce = [[UILabel alloc] initWithFrame:CGRectMake(0, 14, 320, 15)];
[tableHeaderPrononce setTextAlignment:NSTextAlignmentCenter];
tableHeaderPrononce.font = [UIFont fontWithName:@"HelveticaNeue-Light" size:15];
tableHeaderPrononce.text = @"test test test test";
tableHeaderPrononce.alpha = 0.7;
UIView *aHeaderView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 320, 30)];
[aHeaderView setBackgroundColor:[UIColor clearColor]];
[aHeaderView addSubview:tableHeaderLabel];
[aHeaderView addSubview:tableHeaderPrononce];
tableView.tableHeaderView = aHeaderView;
结果如下:
搜索显示控制器
// Create search controller
searchController = [[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self];
searchController.searchResultsDataSource = self;
searchController.searchResultsDelegate = self;
searchController.delegate = self;
【讨论】:
看来您更需要代码。过段时间我会给你代码。谢谢。 看看我的编辑。如果您希望将 UISearchBar 添加为 tableHeaderView 的一部分,我将添加更多代码。 好的,非常感谢!事情是你已经创建了一个独立的 UISearchBar,我的链接到 UISearchDisplayController。此外,它已经出现在 TableViewHeader 上,以防我没有添加那 2 个 UILabel .. 不,它链接到 UISearchDisplayController。由于不需要显示该代码,因此我在这里没有提及。 请期待我的回复会有所延迟,因为我是通过互联网访问最少的移动设备进行的。 :-(【参考方案2】:您可以通过如下所示的 UITableViewDelegate 方法简单地做到这一点:
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
UIView *sectionHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.frame.size.width, 40)];
sectionHeaderView.backgroundColor = [UIColor grayColor];
UILabel *headerLabel = [[UILabel alloc] init];
[sectionHeaderView addSubview:headerLabel];
return sectionHeaderView;
【讨论】:
以上是关于在 iOS7 中使用 UISearchBar 将子视图添加到 tableHeaderView 行为不端的主要内容,如果未能解决你的问题,请参考以下文章
如何在 iOS7 中更改 UISearchBar 的 inputView?