UITableViewController中的导航栏与状态栏重叠

时间:2014-07-09 18:09:02

标签: ios uinavigationbar overlap

在我的UITableViewControllers中我添加了导航栏,但问题是导航栏的标题与状态栏相交。通常我会做“positionForBar”并返回UIBarPositioningTopAttached,但这只适用于UIViewControllers。因此,我使用“prefersStatusBarHidden”方法返回YES。显然,这给用户带来了成本,因为他们在使用应用程序时无法查看这些屏幕上的时间和电池寿命。那么有没有办法让标题导航栏和状态栏不重叠,有点像在iOS 6中?

这就是我所说的: enter image description here

它看起来不太干净,我正在尝试解决它

3 个答案:

答案 0 :(得分:1)

在故事板中单击您的UITableViewController,然后只需单击编辑 - >嵌入 - >导航控制器。您无需使用它在任何地方导航,但它会为您正确设置标题栏。

答案 1 :(得分:0)

尝试使用代码

self.edgesForExtendedLayout = UIRectEdgeNone;

答案 2 :(得分:0)

我有同样的问题。这修好了: 信用:malcolmhall

它只是推动导航但工作

// in the .h
@property (strong) UINavigationBar* navigationBar;

//in the .m
- (void)viewDidLoad {
[super viewDidLoad];

self.navigationItem.title = @"Title";
self.navigationBar = [[UINavigationBar alloc] initWithFrame:CGRectZero];
[self.view addSubview:_navigationBar];
[self.navigationBar pushNavigationItem:self.navigationItem animated:NO];
}

-(void)layoutNavigationBar{
    self.navigationBar.frame = CGRectMake(0, self.tableView.contentOffset.y, self.tableView.frame.size.width, self.topLayoutGuide.length + 44);
    self.tableView.contentInset = UIEdgeInsetsMake(self.navigationBar.frame.size.height, 0, 0, 0);
}

-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
    //no need to call super
    [self layoutNavigationBar];
}

-(void)viewDidLayoutSubviews{
    [super viewDidLayoutSubviews];
    [self layoutNavigationBar];
}