self.navigationController.navigationBar.translucent = NO;
UINavigationController会根据一组奇怪而未记录的约束条件,将其UINavigationBar的高度更改为44点或64点。如果UINavigationController检测到其视图框架的顶部与其UIWindow的顶部在视觉上是连续的,则使用64点的高度绘制其导航栏。如果其视图的顶部与UIWindow的顶部不相邻(即使只差一个点),则以传统方式使用44点的高度绘制其导航栏。即使UINavigationController在应用程序的视图控制器层次结构中有多个子级,也会执行此逻辑。无法阻止此行为。
完整解释在此处。
navigationController.navigationBar.clipsToBounds = YES;
UINavigationBar
在状态栏下面延伸背景,它的 clipsToBounds
必须设置为 NO
(默认值)。确保不要随意更改它。navigationController.navigationBar.clipsToBounds = NO;
Swift 5
navigationController?.navigationBar.isTranslucent = false
不确定这是否能解决你的问题,但你可以尝试我所做的。
我在视图控制器的右侧菜单“模拟指标”> 顶部栏 > “不透明导航栏”中遇到了同样的问题。
在viewcontroller.h文件中创建导航栏的iboutlet
@property (weak, nonatomic) IBOutlet UINavigationBar *navBar;
您可以在viewDidLoad中按照以下步骤操作
UIView *addStatusBar = [[UIView alloc] init];
//使用设备宽度绘制状态栏 addStatusBar.frame = CGRectMake(0, -20, self.view.frame.size.width, 20);
//将背景颜色设置为状态栏颜色
addStatusBar.backgroundColor = [UIColor colorWithRed:24.0/255. green:24/255. blue:24.0/255. alpha:1];
[self.view addSubview:addStatusBar];
//将您的状态栏添加到您在文件.h中声明的UINavigationBar *navBar中 [self.navBar addSubview:addStatusBar];