2017-09-28 1 views
0

私はUINavigationBarをプログラムで作成しており、ステータスバーの下に拡張したいと考えています。コードは次のとおりです。プログラムでUINavigationBarとステータスバーを追加する

_baseView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height)];[_baseView setBackgroundColor:[UIColor redColor]]; 
self.view = _baseView; 

_navigationBar = [[UINavigationBar alloc] init]; 

[_navigationBar setBarTintColor:[UIColor greenColor]]; 
[_navigationBar setBackgroundColor:[UIColor purpleColor]]; 

UINavigationItem* navigationItem = [[UINavigationItem alloc] initWithTitle:@"Title!"]; 
[_navigationBar setTitleTextAttributes:self.navigationController.navigationBar.titleTextAttributes]; 
[_navigationBar pushNavigationItem:navigationItem animated:NO]; 

[_navigationBar setTranslatesAutoresizingMaskIntoConstraints:NO]; 

[self.view addSubview:_navigationBar]; 

[_navigationBar.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor].active = YES; 
[_navigationBar.trailingAnchor constraintEqualToAnchor:self.view.trailingAnchor].active = YES; 
[_navigationBar.topAnchor constraintEqualToAnchor:self.view.topAnchor].active = YES; 
[_navigationBar.heightAnchor constraintEqualToConstant:64].active = YES; 

残念ながら出力は正しくありません。下の画像で分かるように、UINavigationBar全体が正しいサイズ(紫色)ですが、タイトルとそれ以外の部分は同じサイズではありません。

私はここで何が欠けていますか?

enter image description here

答えて

0

一つの可能​​な解決策は、UINavigationControllerに埋め込むれます。

別の方法は次のとおりです。

UINavigationBarを作成するときに、デリゲートとして自己を設定し、実施し、あなたのViewController UINavigationBarDelegateください - (UIBarPosition)positionForBar:

サンプル:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    _baseView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height)]; 
    [_baseView setBackgroundColor:[UIColor redColor]]; 
    self.view = _baseView; 

    _navigationBar = [[UINavigationBar alloc] init]; 

    [_navigationBar setBarTintColor:[UIColor greenColor]]; 
    [_navigationBar setBackgroundColor:[UIColor purpleColor]]; 

    [_navigationBar setDelegate:self]; 

    UINavigationItem* navigationItem = [[UINavigationItem alloc] initWithTitle:@"Title!"]; 
    [_navigationBar setTitleTextAttributes:self.navigationController.navigationBar.titleTextAttributes]; 
    [_navigationBar pushNavigationItem:navigationItem animated:NO]; 

    [_navigationBar setTranslatesAutoresizingMaskIntoConstraints:NO]; 

    [self.view addSubview:_navigationBar]; 

    [_navigationBar.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor].active = YES; 
    [_navigationBar.trailingAnchor constraintEqualToAnchor:self.view.trailingAnchor].active = YES; 
    if (@available(iOS 11.0, *)) { 
     [_navigationBar.topAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.topAnchor].active = YES; 
    } else { 
     [_navigationBar.topAnchor constraintEqualToAnchor:self.topLayoutGuide.bottomAnchor].active = YES; 
    } 
} 

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

あなたがUINavigationViewControllerを作成し、以下に示すようにUINavigationViewController内のあなたのUIViewControllerをプッシュすることができます。azamsharpが指摘したように

let dishesTableViewController = DishesTableViewController() 
let navigationController = UINavigationController(rootViewController: dishesTableViewController) 
+0

を私は場合は、このアプローチを使用しないことを好むだろうできる;これは完全に有効です。 –

+0

なぜこのアプローチを使用しないのですか? – azamsharp

関連する問題