技术CTO-关注编程入门知识,提供编程入门教程

您的位置: 首页 > 移动开发 > ios > 正文

ios7下使用presentViewController会出现ViewController遮挡住状态栏的问题

来源: 技术CTO 阅读:

ios7下使用presentViewController会出现ViewController遮挡住状态栏的问题


        TCWBRebroadcastMsgViewController *tCWBRebroadcastMsgViewController = [[TCWBRebroadcastMsgViewController alloc] initWithEngine:self parameter:dic];
        UINavigationController *nvc = [[UINavigationController alloc] initWithRootViewController:tCWBRebroadcastMsgViewController];
        [rootViewController presentViewController:nvc animated:YES completion:nil];


在IOS7下会出现如下问题,怎么解决?

\
楼主应该是代码写的UI吧?从iOs7开始,{0,0}为屏幕最左上角点,包括了状态栏,所以你可以预定义一个变量:
#define UI_DEFAULT_ORIGIN_Y (IS_IOS_7 ? 64.0f : 0.0f)
引用 1 楼 sinom 的回复:
楼主应该是代码写的UI吧?从iOs7开始,{0,0}为屏幕最左上角点,包括了状态栏,所以你可以预定义一个变量:
#define UI_DEFAULT_ORIGIN_Y (IS_IOS_7 ? 64.0f : 0.0f)

不是啊,那你导航条怎么办?
你的视图是从下弹出的,不是PUSH进来的。导航条顶到最上面去了,怎么改他得位置?
 嗯,我也才发现这个问题,你是直接设置navigationBar的backgroundimage是吧?现在我试了改成:
UIImageView *imageView = [[[UIImageView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, self.view.width, 45.0f)] autorelease];
    imageView.image = [UIImage imageNamed:@"top_bg"];
    [self.navigationController.navigationBar addSubview:imageView];
但感觉这样做并不好,比如这样会盖着title,正在找更好的办法
主要是原来的程序与ios7版本兼容的问题,你可以尝试加上下面的代码

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)
    {
        self.edgesForExtendedLayout = UIRectEdgeNone;
        self.extendedLayoutIncludesOpaqueBars = NO;
        self.modalPresentationCapturesStatusBarAppearance = NO;
        self.automaticallyAdjustsScrollViewInsets = YES;
    }
#endif

#define IsIos7 ([[[UIDevice currentDevice] systemVersion] doubleValue]>=7.0)

  -(void)shipeiForIos7
{
    if (IsIos7) {
        self.edgesForExtendedLayout = UIRectEdgeNone;
    }
}
在.plist中设置这个属性Status bar style为Transparent black style(alpha of 0.5);应该就没问题了,lz可以试试看行不行。
不知lz解决没,同样遇到这个问题
遇到相同的问题了,忙了几天才发现问题,产生的原因有点奇葩,有可能跟楼主的原因不一样,不过还是希望能帮到跟我有一样问题的朋友:
问题是修改代码出现的,手贱在以前自定义继承UITabBarController的类中添加了
-(NSUInteger) supportedInterfaceOrientations{
    return UIInterfaceOrientationPortrait;
}
(这个方法在每个页面基类中也有,不知道会不会有影响)
方法,注释之后就没有问题了,使用presentViewController跳转拍照和自定义的页面都没有问题
原因暂时没有不知道,如果有哪位朋友知道希望能告诉我下
楼主的navigationController如果是系统的好办些,设置navigationBar.translucent = NO,ios7以后默认YES
你确定你的导航背景图片的像素是320 * 44 或者960 * 88吗?如果不是的话,请手动修改成苹果规定的大小!

^_^ 如果您热爱技术、热爱编程,想与更多的朋友一起交流学习,欢迎加入本站官方QQ群:345733473 ^_^