self.navigationController.navigationBar.translucent = 否;在 navigationBar 之后创建一个额外的间隙

self.navigationController.navigationBar.translucent = NO; create an extra gap after navigationBar

先说明一下我的情况。我在我的 appDelegate 中设置了 UINavigationBar 颜色 Like:

[[UINavigationBar appearance] setBarTintColor:[UIColor colorWithRed:255.0f/255.0f green:87.0f/255.0f blue:10.0f/255.0f alpha:1]];

现在在我的一些viewControllerUINavigationBartranslucent设置为YES

self.navigationController.navigationBar.translucent = YES;

这就是为什么我的 UINavigationBar 有阴影。它没有显示确切的颜色。作为解决方案,我将 translucentYES 设置为 NO。它现在显示的是准确的颜色,但我面临的是我的某些视图完全从我的界面中消失了。在这里,让我告诉你一件事,这里的很多视图都是通过编程方式定位的,所以恐怕我不能将我的每个 viewController 视图都移动到 64 像素高。只是想知道是否有任何解决方案来解决这个问题。我尝试使用 opaque,但没有成功。如果有人了解我的问题,请分享解决方案(如果有)。非常感谢。

从 iOS7 开始,如果您使用半透明条(在 UINavigationControllerUITabbarController 中),托管视图控制器具有在其下扩展的默认行为。如果您说将条形图设置为半透明,它的颜色将是它下方的视图和蝙蝠颜色的组合。这是正常的,唯一的方法是将半透明设置为无或将背景图像应用于导航栏。
手动应用框架在自动布局下会导致意想不到的结果,您必须使用约束。

[更新]

要从纯色创建背景图像,您可以使用该方法,图像为 1px 正方形,但没有问题,因为它可以拉伸或平铺以覆盖整个区域:

+ (UIImage *) imageWithColor:(UIColor*) color {
    CGRect rect = CGRectMake(0, 0, 1, 1);
    UIGraphicsBeginImageContext(rect.size);
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetFillColorWithColor(context, color.CGColor);
    CGContextFillRect(context, rect);
    UIImage *colorImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return colorImage;
}

如果您看到额外的间隙可能是因为您也将 automaticallyAdjustScrollViewInset 设置为 YES,请尝试将其设置为 NO。如果它继承自 UIScrollView

,此 属性 添加和额外插入到您的视图或 vfirst 视图子视图中

它晚了,但我遇到了同样的问题,我通过在情节提要中的 Viewcontroller 上制作 UINavigationbar none 解决了这个问题,并将视图的大小从 0,0

开始