我想创建一个使用导航栏的应用程序,但仅用于显示标题和一些按钮(它使用的是vie容器)。我希望导航栏与状态栏“融合”,就像这样
但是当我使用通用视图控制器并在其中拖动导航栏时,看起来就像这样:
有办法做到这一点吗?
答案 0 :(得分:3)
我找到了针对这个特定问题的解决方案。将导航栏的半透明属性设置为NO:
self.navigationController.navigationBar.translucent = NO;
答案 1 :(得分:1)
UINavigationController会将其UINavigationBar的高度更改为44点或64点,具体取决于相当奇怪且未记录的约束集。如果UINavigationController检测到其视图框架的顶部与UIWindow的顶部在视觉上是连续的,那么它将绘制高度为64点的导航栏。如果它的视图顶部与UIWindow的顶部不连续(即使只关闭一个点),那么它以“传统”方式绘制其导航栏,高度为44点。即使在应用程序的视图控制器层次结构中有多个子项,UINavigationController也会执行此逻辑。没有办法阻止这种行为。
完整解释here。
答案 2 :(得分:0)
不确定这是否会解决您的问题,但您可以尝试我所做的。
我在viewcontroller的右侧菜单“Simulated Metics”中遇到了同样的问题>顶栏> “不透明的导航栏”
答案 3 :(得分:0)
创建导航栏的iboutlet中的viewcontroller.h文件
@property (weak, nonatomic) IBOutlet UINavigationBar *navBar;
您可以在viewDidLoad中执行以下操作
UIView * addStatusBar = [[UIView alloc] init];
//绘制宽度为device的状态栏 addStatusBar.frame = CGRectMake(0,-20,self.view.frame.size.width,20);
//将背景颜色设置为状态栏
addStatusBar.backgroundColor = [UIColor colorWithRed:24.0 / 255。绿色:二百五十五分之二十四。蓝色:24.0 / 255。阿尔法:1];
[self.view addSubview:addStatusBar];
//将状态栏添加到您的文件.h中声明的UINavigationBar * navBar [self.navBar addSubview:addStatusBar];
答案 4 :(得分:0)
navigationController.navigationBar.clipsToBounds = YES;
为了让UINavigationBar
在状态栏下扩展其背景,其clipsToBounds
必须设置为NO
(这是默认设置)。确保你不要嘲笑它。
解决方案简单如下: -
navigationController.navigationBar.clipsToBounds = NO;
答案 5 :(得分:0)
快捷键5
navigationController?.navigationBar.isTranslucent = false