iOS7:UINavigationBar与状态栏合并

时间:2014-11-21 04:06:11

标签: ios objective-c iphone uitableview ios7

我是iOS的新手以及我在跟随

的情况
  • 我的UIViewController UITableViewUINavigationBar
@interface CategoryGroupViewController : UIViewController<UITableViewDataSource, UITableViewDelegate>
@property (weak, nonatomic) IBOutlet UINavigationBar *navigationBar;
@property (strong, nonatomic) IBOutlet UITableView *tableView;
@end

XIB中,它看起来像是

enter image description here

当我运行我的应用程序时,它看起来像

enter image description here

我在网上查看了解决方案,并尝试设置

self.edgesForExtendedLayout = UIRectEdgeNone;

但这似乎无法解决问题。 有人可以指导我缺少什么吗?

谢谢

4 个答案:

答案 0 :(得分:0)

按照以下步骤使用NavigationContoller的默认导航栏。

所以你的流程是UIWindow&gt; UINavigationController&gt;的UIViewController。

appDidFinishlaunching

中的

self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainscreen].bounds];
self.vc = [[CategoryGroupViewController alloc]initWithNibName:@"CategoryGroupViewController" bundle:nil];
self.navC = [[UINavigationController alloc]initWithRootViewController:self.vc];
self.navC.navigationBar.translucent = NO;
self.window.rootViewController = self.navC;
[self.window makeKeyAndVisible];

现在运行您的应用程序,您将获得64px导航栏。如果你想标题那个viewcontroller那么

在CategoryGroupViewController的viewDidLoad

self.title = @"Pick Group";

如果要隐藏此导航栏,则只需在特定控制器中使用代码即可。但是一旦你隐藏了导航栏将隐藏在整个应用程序中。所以你必须手动管理它。

self.navigationController.navigationBarHidden = YES;

也许这会对你有帮助。

答案 1 :(得分:0)

从iOS 7开始,Apple限制使用状态栏和导航栏。我的意思是它现在是透明的。

仍然有办法实现我们的目标。

方式1:我们可以使用64 px的导航条图像(128 x @ 2x分辨率)。 它会自动为我们的导航栏和状态栏着色。

方式2:我们可以选择其他解决方案

 if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
self.edgesForExtendedLayout = UIRectEdgeNone;

您需要在-(void)viewDidLoad方法中添加以上内容。

由于

答案 2 :(得分:0)

假设您明确打算使用自己的导航栏而不是UINavigationController提供的导航栏,则需要考虑顶部布局指南。现在你的栏被限制在视图的顶部,而不是需要考虑状态栏的高度。您还希望能够响应状态栏的扩展(就像您在通话中一样)。这些约束可以解决问题

id topGuide = self.topLayoutGuide;
UINavigationBar *navBar = self.navigationBar

//navBar.top == self.view.top
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[navBar]"
                                                                      options:0
                                                                      metrics:nil
                                                                        views:NSDictionaryOfVariableBindings (navBar)]];

//pin navBar to horizontal edges
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[navBar]|"
                                                                      options:0
                                                                      metrics:nil
                                                                        views:NSDictionaryOfVariableBindings (navBar)]];

//navBar.bottom = statusBar.bottom + 44
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:navBar
                                                          attribute:NSLayoutAttributeBottom
                                                          relatedBy:NSLayoutRelationEqual
                                                             toItem:topGuide
                                                          attribute:NSLayoutAttributeBottom
                                                         multiplier:1.f
                                                           constant:44]];

答案 3 :(得分:0)

我遇到了同样的问题。但是通过增加delta y position的{​​{1}}来解决我的问题。

enter image description here

查看以上屏幕截图。您可以像这样添加view位置。这对我有用。希望它对你有用。试试这个。