如何修复表格视图的搜索栏与状态栏重叠

Posted

技术标签:

【中文标题】如何修复表格视图的搜索栏与状态栏重叠【英文标题】:How to fix table view's search bar overlapping with status bar 【发布时间】:2015-08-29 08:36:26 【问题描述】:

我在导航控制器中有一个 UITableViewController,带有一个搜索栏。这就是我在 viewDidLoad 中添加搜索栏的方式:

let resultsController = SearchTableViewController()
resultsController.people = people
searchController = UISearchController(searchResultsController: resultsController)
let searchBar = searchController.searchBar
searchBar.placeholder = "Search a person"
searchBar.sizeToFit()
tableView.tableHeaderView = searchBar
searchController.searchResultsUpdater = resultsController

这是结果:

我尝试在情节提要中编辑表格视图以添加约束以使其远离顶视图的边距,但我无法添加约束,可能是因为表格视图位于 UITableViewController 内。

【问题讨论】:

最佳解决方案。创建新的uiview,离开顶部20像素,并在该headerview中添加uisearchbar并将整个视图分配为tableheaderview,您的问题将得到解决。 我没有发现您已将 uitableviewcontroller 嵌入到 uinavigationcontroller 中。从情节提要中,您只需选择视图控制器并转到编辑器 > 嵌入 > 导航控制器 它已经在一个导航控制器中,我可以从storyboard文件中清楚地看到它:onedrive.live.com/… 【参考方案1】:

我认为您需要此代码。

在您的 viewDidLoad 方法中添加以下代码:

self.tableView.contentInset = UIEdgeInsetsMake(20, 0, 0, 0)

你的 tableview 会是这样的:

编辑:

您可以使用此代码强制滚动表格:

tableView.scrollToRowAtIndexPath( NSIndexPath(index: 0), atScrollPosition: UITableViewScrollPosition.Top, animated: false)

【讨论】:

这样,当我启动应用程序时,我仍然可以看到表格视图和状态栏重叠,但如果我滚动它,它就会得到修复。观看此视频:onedrive.live.com/… @RamyAlZuhouri 尝试添加 tableView.scrollToRowAtIndexPath( NSIndexPath(index: 0), atScrollPosition: UITableViewScrollPosition.Top, animated: false)【参考方案2】:

我知道您正在快速编写代码,但这就是您在 ObjectiveC 中隐藏状态栏的方式

- (void)viewDidLoad

    [super viewDidLoad];
    // Do any additional setup after loading the view.

    if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) 
        // ios 7
        [self prefersStatusBarHidden];
        [self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];
     else 
        // iOS 6
        [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];
    


// Add this Method
- (BOOL)prefersStatusBarHidden

    return YES;

这是 swift How do I hide the status bar in a Swift iOS app? 的答案

【讨论】:

【参考方案3】:

尝试将以下代码放入 AppDelegate 类的 didFinishLaunching

迅速-

    var version = ( UIDevice.currentDevice().systemVersion as NSString ).floatValue

   if (version >= 7) 
        application.setStatusBarStyle(  UIStatusBarStyle.LightContent, animated: true);
        window?.clipsToBounds = true;
        window?.frame =  CGRectMake(0,20,self.window!.frame.size.width,self.window!.frame.size.height-20);
    

在 Objective-c 中 -

    if (UIDevice.currentDevice.systemVersion] floatValue] >= 7) 
        [application setStatusBarStyle:UIStatusBarStyleLightContent];
        self.window.clipsToBounds =YES;
        self.window.frame =  CGRectMake(0,20,self.window.frame.size.width,self.window.frame.size.height-20);
    

并在您的 ViewController 类中添加以下方法-

目标-c-

-(UIStatusBarStyle)preferredStatusBarStyle 
    return UIStatusBarStyleLightContent; 
  

迅速-

override func preferredStatusBarStyle() -> UIStatusBarStyle 
    return UIStatusBarStyle.LightContent

【讨论】:

它有点工作,但现在有一个黑色间隙而不是状态栏:onedrive.live.com/… 嗨@RamyAlZuhouri,请尝试编辑代码。它肯定会奏效。【参考方案4】:

添加 UISearchControllerDelegate;

然后

-(void)willDismissSearchController:(UISearchController *)searchController
_tableView.contentInset = UIEdgeInsetsMake(20, 0, 44, 0);

【讨论】:

以上是关于如何修复表格视图的搜索栏与状态栏重叠的主要内容,如果未能解决你的问题,请参考以下文章

UISearchController 的搜索栏与第一个 tableview 单元格重叠

如何修复 iOS 7 中的状态栏重叠问题

iOS11中没有状态栏的导航栏与安全区域重叠

状态栏与工具栏重叠

在 iOS 7 中让导航栏与状态栏重叠

让导航栏与iOS 7中的状态栏重叠