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

时间:2015-06-13 11:39:25

标签: ios swift uitableview statusbar

我在导航控制器中有一个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

结果如下:

enter image description here

我尝试在故事板中编辑表格视图以添加约束以使其从顶视图的边距更远,但我无法添加约束,可能是因为表格视图位于UITableViewController中。

4 个答案:

答案 0 :(得分:7)

我认为您需要此代码。

viewDidLoad方法中添加以下代码:

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

你的桌面视图将是这样的:

enter image description here

修改

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

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

答案 1 :(得分:1)

我知道你在swift中编写代码,但这就是你在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?

中的答案

答案 2 :(得分:0)

尝试在 AppDelegate

didFinishLaunching 中添加以下代码

在swift中 -

    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
}

答案 3 :(得分:0)

添加UISearchControllerDelegate;

然后

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