UINavigationBar
我需要像UIView
这里一样覆盖
除了使用带有按钮的自定义 UIView 作为导航栏之外,有没有办法做到这一点?
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 。它看起来与导航栏相同。然后添加更多带有红色书签的 UIView。除此之外,它还可以单独为触摸书签设置动画。
如果我以这种方式添加书签:[navigationBar addSubview:myRibbon]; 它隐藏在一半大小上
这是我的实现方式,希望对您有所帮助..
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()
}
这是一个 Swift 3 的答案
UIApplication.shared.keyWindow?.addSubview(menuView)