搜索结果在状态栏下方明显滚动

Posted

技术标签:

【中文标题】搜索结果在状态栏下方明显滚动【英文标题】:Search Results Visibly Scrolling Underneath the Status Bar 【发布时间】:2014-11-24 19:38:57 【问题描述】:

通过UISearchBar 对数据集执行搜索时,搜索结果成功显示在UITableViewControllerUITableView 中。但是,当向下滚动查看结果时,UITableView 的行会明显出现在UINavigationBar 和模拟器的状态栏下方。

这显然不是我想要的外观。理想情况下,我希望UISearchBar 充当UITableView 的标题,所有搜索结果都包含在UISearchBar 的范围按钮下方,但我的尝试没有成功。

下面是相关UITableViewController 及其UITableView 属性的故事板设置。

下面是我用来设置UISearchController 及其UISearchBar 的相关代码。

BallotTunesSearchTableViewController.h

@interface BallotTunesSearchTableViewController : UITableViewController <UISearchControllerDelegate, UISearchResultsUpdating, UISearchBarDelegate>

BallotTunesSearchTableViewController.m

- (void)viewDidLoad 
    [super viewDidLoad];
    self.appDelegate = [[UIApplication sharedApplication] delegate];

    // Initialize the search controller
    self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
    self.searchController.searchResultsUpdater = self;
    self.searchController.dimsBackgroundDuringPresentation = NO;

    // Setup the search bar
    self.searchController.searchBar.delegate = self;
    self.searchController.searchBar.scopeButtonTitles = [NSMutableArray arrayWithObjects:SongScopeName, ArtistScopeName, AlbumScopeName, nil];
    self.tableView.tableHeaderView = self.searchController.searchBar;

更新:注意UITableViewController嵌入在UINavigationController中,当将UINavigationBar的半透明设置为NO时,UISearchBar会沿着视图滑出与UINavigationBar

另外请注意,我没有在 Storyboard 中实现 UISearchBar(但是,如果我无法让当前的设置正常工作,我可能会采用该方法)。

【问题讨论】:

尝试将导航栏设置为不透明。 self.navigationController.navigationBar.translucent = NO; @MikeWelsh 很好的建议。但是,当关闭 UINavigationBar 的半透明时,UISearchBar 在选中时会滚出视图,因为它依赖于嵌入在 UINavigationBar 中。 这个 VC 是否嵌入在 UINavigationController 中?您如何介绍这个搜索 VC? @MikeWelsh 是的,上面的 TVC 嵌入在 UINavigationController 中,目前,应用程序在启动时直接打开到 UINavigationController,将上面的 TVC 作为第一个视图。 如果导航栏不是半透明的并且您没有将导航栏设置为隐藏 (self.navigationController.navigationBarHidden = NO;),我认为它应该会出现...不太确定您的情况是怎么回事.您是否尝试过实现preferredStatusBarStyle 【参考方案1】:

经过几次掌心,都归结为缺少这行代码:

self.definesPresentationContext = YES;

将展示上下文设置为YES表示当视图控制器展示UISearchController时应该覆盖视图控制器的视图。

【讨论】:

一些额外的注释,你必须在呈现视图控制器中添加 self.definesPresentationContext = true 。对我来说,如果呈现视图控制器隐藏了它的状态栏,它就不起作用了,我必须让它在搜索结果视图控制器中可见

以上是关于搜索结果在状态栏下方明显滚动的主要内容,如果未能解决你的问题,请参考以下文章

如何在 UISplitViewController 的导航栏下方添加搜索栏?

如何避免带有缺口的设备上 UICollectionView 搜索栏下方的空白?

UIScrollView 在导航和状态栏下方移动

没有 AppBar 的 Flutter 布局

直接在导航栏下方滚动表格视图单元格?

带有搜索栏的 Flutter 粘性标题