我想在我的应用顶部设置一个UINavigationBar
,就像在手机应用中一样,但我不想将其与UINavigationController
一起使用,即,我想用它作为一个独立的"对象
具有UINavigationBar
的视图控制器的视图位于 .xib 文件中。我尝试从对象库拖动UINavigationBar
的实例,但它工作正常,但应用的状态栏仍为白色,而UINavigationBar
为灰色。我希望状态栏具有相同的灰色调,但不是视图的其余部分。
为了告诉你我的意思,我有两张照片。首先是手机应用程序。请注意,状态栏和导航栏是灰色的,但背景为白色。
以下图片来自我的应用,因为您可以看到状态栏是白色的(我希望它也是灰色的)。
我还尝试在视图控制器中使用以下代码。
- (void)viewDidLoad
{
[super viewDidLoad];
self.navigationItem.title = @"Köp ProViva";
}
我在使用和不使用UINavigationBar
的情况下尝试了它,但是没有显示导航栏或者它看起来和以前一样。
如何添加UINavigationBar并使状态栏具有相同的颜色?
答案 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);
}
}
class TopAttachedNavigationBarDelagete: NSObject, UINavigationBarDelegate {
func position(for bar: UIBarPositioning) -> UIBarPosition {
return .topAttached
}
}