在故事板中,在视图控制器中,我尝试在状态栏下添加一个导航栏,运行它,它是透明的,并显示一个应该模糊的标签,如导航栏。
但是当放置嵌入在导航视图控制器中的相同视图控制器时,下面的背景图像可能会模糊,这是我的意图。
这两种方式有什么不同的结果?第一种使状态栏模糊的方法需要做些什么?
谢谢!
答案 0 :(得分:4)
在iOS 7中,状态栏默认为透明。当导航栏实际上创建导航栏时,您看到的模糊。因此,要在没有导航栏的情况下创建您正在寻找的效果,您需要定位一个在状态栏下方产生模糊效果的视图。
作为参考,使用以下提供的框架添加视图:
CGRect statusBarFrame = [[UIApplication sharedApplication] statusBarFrame];
答案 1 :(得分:3)
我知道这是旧的,仅供参考,我通过设置self.navigationController.navigationBar.clipToBounds = NO
答案 2 :(得分:2)
我没有完全测试过,但请转到plist文件并检查以下设置:
“查看基于控制器的状态栏外观”:如果将其设置为“是”,则它应显示每个视图控制器唯一的状态栏,这可能是您所需要的。
“状态栏样式”:您可以将其设置为三种不同的样式:不透明黑色,灰色和透明黑色。
如果这对您有用,请告诉我。
答案 3 :(得分:1)
UINavigationController会将其UINavigationBar的高度更改为44点或64点,具体取决于相当奇怪且未记录的约束集。如果UINavigationController检测到其视图框架的顶部与UIWindow的顶部在视觉上是连续的,那么它将绘制高度为64点的导航栏。如果它的视图顶部与UIWindow的顶部不连续(即使只关闭一个点),那么它以“传统”方式绘制其导航栏,高度为44点。即使在应用程序的视图控制器层次结构中有多个子项,UINavigationController也会执行此逻辑。没有办法阻止这种行为。
看起来您正在第一个示例中定位视图层次结构,从点(0,20)开始。还有,是UIToolbar还是UINavigationBar?如果它是后者,为什么你自己使用它而不是在UINavigationController中使用它?
如果您不使用UINavigationController而是使用自定义视图控制器容器,则需要相应地定位视图。
有关详细说明,请参阅this answer。
答案 4 :(得分:1)
我有类似的UI设计,基于Matt Hall answer和some article我用谷歌搜索,我想出了类似的东西:
- (void)viewDidLoad {
[super viewDidLoad];
if (NSFoundationVersionNumber>NSFoundationVersionNumber_iOS_6_1) {
CGRect statusBarFrame = [self.view convertRect: [UIApplication sharedApplication].statusBarFrame fromView: nil];
UIToolbar *statusBarBackground = [[UIToolbar alloc] initWithFrame: statusBarFrame];
statusBarBackground.barStyle = self.navBar.barStyle;
statusBarBackground.translucent = self.navBar.translucent;
statusBarBackground.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleWidth;
[self.view addSubview: statusBarBackground];
}
}
self.navBar
指向故事板中添加的导航栏。只有当它在iOS7上运行时才需要这就是为什么我添加了这个条件(我的应用程序必须支持iOS5)。
这就像一个魅力。
<小时/> 替代方法(强制执行状态栏大小)也很好:
- (void)viewDidLoad {
[super viewDidLoad];
if (NSFoundationVersionNumber>NSFoundationVersionNumber_iOS_6_1) {
CGRect statusBarFrame = [self.view convertRect: [UIApplication sharedApplication].statusBarFrame fromView: nil];
self.navBar.frame = CGRectUnion(statusBarFrame, self.navBar.frame);
}
}
<小时/> 我发现另一个解决方案我认为这是最佳,因为它涉及仅故事板,并且不需要任何代码。
UINavigationBar
20
delta高度 答案 5 :(得分:0)
当您使用导航视图控制器嵌入视图控制器时,您将看到导航栏到您从同一视图控制器推送到的所有视图控制器。在第一种情况下,您要添加导航栏对象,您可以从故事板中选择视图控制器,转到属性检查器选项卡&amp;从他们选择的顶部栏作为半透明导航栏。