【发布时间】:2013-01-09 09:44:48
【问题描述】:
我需要像这里一样覆盖UINavigationBar 和UIView
除了使用带有按钮的自定义 UIView 作为导航栏之外,还有其他方法吗?
【问题讨论】:
-
如果你想做这种事情比使用 UIView 创建的自定义导航更好。比你完全控制它,你可以给你想要的任何外观......
标签: ios objective-c uiview uinavigationbar
我需要像这里一样覆盖UINavigationBar 和UIView
除了使用带有按钮的自定义 UIView 作为导航栏之外,还有其他方法吗?
【问题讨论】:
标签: ios objective-c uiview uinavigationbar
您可以在应用程序的基础视图中添加子视图
[[[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)
【讨论】: