没有UINavigationController的UINavigationBar

时间:2014-04-16 10:46:50

标签: ios uinavigationbar

我想在我的应用顶部设置一个UINavigationBar,就像在手机应用中一样,但我不想将其与UINavigationController一起使用,即,我想用它作为一个独立的"对象

具有UINavigationBar的视图控制器的视图位于 .xib 文件中。我尝试从对象库拖动UINavigationBar的实例,但它工作正常,但应用的状态栏仍为白色,而UINavigationBar为灰色。我希望状态栏具有相同的灰色调,但不是视图的其余部分。

为了告诉你我的意思,我有两张照片。首先是手机应用程序。请注意,状态栏和导航栏是灰色的,但背景为白色。

iPhone Phone App

以下图片来自我的应用,因为您可以看到状态栏是白色的(我希望它也是灰色的)。

My iPhone app

我还尝试在视图控制器中使用以下代码。

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.navigationItem.title = @"Köp ProViva";
}

我在使用和不使用UINavigationBar的情况下尝试了它,但是没有显示导航栏或者它看起来和以前一样。

如何添加UINavigationBar并使状态栏具有相同的颜色?

6 个答案:

答案 0 :(得分:16)

您可以实施-positionForBar:协议的委托方法UINavigationBarDelegate,只需返回UIBarPositionTopAttached

示例:

-(UIBarPosition)positionForBar:(id<UIBarPositioning>)bar
{
    return UIBarPositionTopAttached;
}

//if you're not using a `UINavigationController` and instead
//simply want a `UINavigationBar` then use the following method as well
-(void)testMethod
{
    UINavigationBar *navBar = [[UINavigationBar alloc] init];
    [navBar setFrame:CGRectMake(0, 20, self.view.frame.size.width, 44)];
    [navBar setBarTintColor:[UIColor lightGrayColor]];
    [navBar setDelegate:self];
    [self.view addSubview:navBar];
}

希望这有帮助。

答案 1 :(得分:2)

//创建普通导航栏

UINavigationBar *headerView = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
headerView.topItem.title = @"title";
[self.view addSubview:headerView];

答案 2 :(得分:2)

您无法直接修改状态栏背景颜色,但由于它是透明的(自iOS7 以来),您可以在状态栏后面放置一个高度为{20}的UIView使用所需的颜色,它将显示为状态栏具有背景颜色。

至于UINavigationBar,它只是修改一个有用的UINavigationBar对象。

示例:

- (void)viewDidLoad
{
    [super viewDidLoad];

    //...

    //ISSUE 1: StatusBar Background
    UIView *vwStatusBarUnderlay = [[UIView alloc] init];
    [vwStatusBarUnderlay setFrame:CGRectMake(0, 0, self.view.frame.size.width, 20)];
    [vwStatusBarUnderlay setBackgroundColor:[UIColor lightGrayColor]];
    [self.view addSubview:vwStatusBarUnderlay];
    //[vwStatusBarUnderlay sendSubviewToBack:self.view];

    //ISSUE 2: NavigationBar
    UINavigationBar *navBar = [[UINavigationBar alloc] init];
    [navBar setFrame:CGRectMake(0, 20, self.view.frame.size.width, 44)];
    [navBar setBarTintColor:[UIColor lightGrayColor]];
    [navBar setTranslucent:NO];

    UINavigationItem *navItem = [[UINavigationItem alloc] init];
    [navItem setTitle:@"Favoriter"];
    [navItem setRightBarButtonItem:[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:nil action:nil]];

    [navBar setItems:@[navItem]];
    [self.view addSubview:navBar];
}

答案 3 :(得分:1)

第一个答案对我来说效果很好,但这里是Swift而不是Objective-C:

1-您将导航栏的委托设置为viewcontroller,无论是通过故事板还是代码。
2-将UINavigationBarDelegate添加到控制器协议中或按以下方式扩展它:

extension ViewController: UINavigationBarDelegate {
    func positionForBar(bar: UIBarPositioning) -> UIBarPosition {
        return UIBarPosition.TopAttached
    }
}

就是这样,完美无缺!

答案 4 :(得分:0)

我们无法根据自己的选择设置状态栏的颜色,我们可以做的是;

在AppDelegate.m文件中;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
      //Set status bar style here
       [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

}

答案 5 :(得分:0)

string strConnect = @"Data Source=GRIFFPC\SQLEXPRESS;Initial Catalog=Testing;Integrated Security=True";
using (SqlConnection con = new SqlConnection(strConnect))
    {
    con.Open();
    using (SqlBulkCopy bulk = new SqlBulkCopy(con))
        {
        bulk.DestinationTableName = "Test";
        bulk.WriteToServer(dt);
        }
    }
  1. 在Interface Builder中添加一个对象并将其类设置为class TopAttachedNavigationBarDelagete: NSObject, UINavigationBarDelegate { func position(for bar: UIBarPositioning) -> UIBarPosition { return .topAttached } }
  2. 选择一个UINavigationBar,然后在Connections Inspector中将委托属性与先前创建的对象连接