ここのようにUINavigationBar
とUIView
をオーバーレイする必要があります
ボタンをナビゲーションバーとして使用するカスタムUIViewを使用する以外に、これを行う方法はありますか?
アプリケーションのベースビューにサブビューを追加できます
[[[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];
}
次の方法を使用します。
- (void)bringSubviewToFront:(UIView *)view
したがって、あなたの場合は次のようになります。
[navigationBar addSubview:myRibbon];
[navigationBar bringSubviewToFront:myRibbon];
また、この方法では、これを行う場合を除いて、リボンが完全に表示されないことを忘れないでください。
navigationBar.clipsToBounds = NO;
NavigationBarを非表示にし、代わりにUIViewを追加しました。 Navbarと同じように見えます。次に、赤いブックマークが付いたUIViewをさらに1つ追加します。それに加えて、タッチでブックマークを個別にアニメーション化する可能性があります。
この方法でブックマークを追加した場合:[navigationBar addSubview:myRibbon];サイズの半分に隠されていました
これがSwift 3の答えです
UIApplication.shared.keyWindow?.addSubview(menuView)
これが私の実装方法です。これがお役に立てば幸いです。
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()
}