Ios 如何在双状态栏下方添加UIView
我想以编程方式在ViewController中可见部分的顶部添加一个红色矩形。我的代码是:Ios 如何在双状态栏下方添加UIView,ios,layout,uiviewcontroller,Ios,Layout,Uiviewcontroller,我想以编程方式在ViewController中可见部分的顶部添加一个红色矩形。我的代码是: - (void)viewDidLoad { [super viewDidLoad]; CGRect rect = self.view.frame; CGRect newFrame = CGRectMake(0.f, 0.f, rect.size.width, 200); UIView *newView = [[UIView alloc] initWithFrame:newF
- (void)viewDidLoad
{
[super viewDidLoad];
CGRect rect = self.view.frame;
CGRect newFrame = CGRectMake(0.f, 0.f, rect.size.width, 200);
UIView *newView = [[UIView alloc] initWithFrame:newFrame];
newView.backgroundColor = [UIColor redColor];
[self.view addSubview:newView];
}
当我在iPhone5模拟器中启动它时,它的工作原理与预期一致:
红色矩形的高度为400像素=200*2
但当我在模拟器的呼叫状态栏中切换,并再次启动我的应用程序时,它看起来如下所示:
绿色条的高度是80,正如预期的那样=20*2*2,但红色矩形的高度是360,而不是400!。因此红色矩形的前40个像素隐藏在绿色条的后面。我怎样才能避免它,让我的红色矩形刚好低于绿色条
其他信息:我的应用程序创建为文件->新建->项目->IOS单视图应用程序。我已关闭“使用自动布局”和“使用大小类别”复选框。从iOS 7开始,状态栏不再自动影响应用程序的大小/布局。您的红色UIView仍然是400px高;40个像素隐藏在通话状态栏后面。如果希望UI元素尊重状态栏高度/状态的更改,则必须以编程方式进行 您可以在应用程序代理中实现application:willChangeStatusBarFrame:和/或application:didChangeStatusBarFrame来解决此问题:
- (void)application:(UIApplication *)application willChangeStatusBarFrame:(CGRect)newStatusBarFrame {
ViewController *viewController = /* reference to your view controller */;
UIView *newView = ((UIView *)(viewController.view.subviews.firstObject)); // you should really make newView a property in ViewController so you can access it properly
newView.frame = CGRectMake(newView.frame.origin.x, newView.frame.origin.y + CGRectGetMaxY(newStatusBarFrame), newView.frame.size.width, newView.frame.size.height);
}
答案已发布,但我有点担心您已禁用项目的自动布局。现在,如果您想支持多个屏幕尺寸/方向,这几乎是必要的。