web-dev-qa-db-ja.com

ナビゲーションバーにUIViewを追加するにはどうすればよいですか?

ここのようにUINavigationBarUIViewをオーバーレイする必要があります

http://screencast.com/t/ZKXNFcAzVu

ボタンをナビゲーションバーとして使用するカスタムUIViewを使用する以外に、これを行う方法はありますか?

14

アプリケーションのベースビューにサブビューを追加できます

[[[UIApplication sharedApplication] keyWindow] addSubview:vMyCustomUIView];

ビューコントローラが表示されている場合にのみ表示されるようにするには、viewDidAppearおよびviewDidDisappearデリゲートメソッドで追加および削除できます。これらに重なる青いボックスを表示する例を次に示します。

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.    
    vTestView = [[UIView alloc] initWithFrame:CGRectMake(10.0f,
                                                         10.0f,
                                                        100.0f,
                                                        100.0f)];
    vTestView.backgroundColor = [UIColor blueColor];
}


-(void)viewDidAppear:(BOOL)animated
{
    [[[UIApplication sharedApplication] keyWindow] addSubview:vMyCustomUIView];
}
-(void)viewDidDisappear:(BOOL)animated
{
    [vMyCustomUIView removeFromSuperview];
}
24

次の方法を使用します。

- (void)bringSubviewToFront:(UIView *)view

したがって、あなたの場合は次のようになります。

[navigationBar addSubview:myRibbon];
[navigationBar bringSubviewToFront:myRibbon];

また、この方法では、これを行う場合を除いて、リボンが完全に表示されないことを忘れないでください。

navigationBar.clipsToBounds = NO;
13
delannoyk

NavigationBarを非表示にし、代わりにUIViewを追加しました。 Navbarと同じように見えます。次に、赤いブックマークが付いたUIViewをさらに1つ追加します。それに加えて、タッチでブックマークを個別にアニメーション化する可能性があります。

この方法でブックマークを追加した場合:[navigationBar addSubview:myRibbon];サイズの半分に隠されていました

1

これがSwift 3の答えです

UIApplication.shared.keyWindow?.addSubview(menuView)
0
JP Aquino

これが私の実装方法です。これがお役に立てば幸いです。

  override func viewWillAppear(_ animated: Bool) {
    let testView = UIView(frame: .zero)
    testView.backgroundColor = .black
    testView.layer.cornerRadius = 10
    testView.translatesAutoresizingMaskIntoConstraints = false
    self.navigationController?.navigationBar.addSubview(testView)
    NSLayoutConstraint.activate([
      testView.widthAnchor
        .constraint(equalToConstant: 50),
      testView.heightAnchor
        .constraint(equalToConstant: 70),
      testView.topAnchor
        .constraint(equalTo: (self.navigationController?.navigationBar.topAnchor)!),
      testView.trailingAnchor
        .constraint(equalTo: (self.navigationController?.navigationBar.trailingAnchor)!, constant: -20)
      ])
    self.customView = testView
  }

  // i dont need to display the overlay in every page
  // so i remove it everytime i navigate to a new page
  override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    self.customView.removeFromSuperview()
  }

navigation bar overlay

0
aianLee