导航栏控制器遮挡视图

来源:互联网 发布:软件代码编写规范 编辑:程序博客网 时间:2024/06/06 03:21

iOS7.0后系统,使得self.view中的视图在设置frame时,会被导航栏控制器遮挡,即frame.y的计算不是从导航栏控制器下面开始计算,而是从屏幕左上角开始计算。所以为了解决这个问题,可以在添加如下代码进行解决。

// 通常写在base类的loadView方法中// iOS7.0后,显示在导航栏之下,即frame.y从导航栏下面开始算起if ([self respondsToSelector:@selector(setEdgesForExtendedLayout:)]){        // 不要往四周边沿展开,避免被导航栏遮挡        [self setEdgesForExtendedLayout:UIRectEdgeNone];                // 取消半透明色,避免被导航栏遮挡        self.navigationController.navigationBar.translucent = NO;                // 展开时不包含导航栏,避免被导航栏遮挡        self.extendedLayoutIncludesOpaqueBars = NO;                // 改变scrollView的contentInsets,避免scrollView,tableView,collectionView的contentInset.top = 64        self.automaticallyAdjustsScrollViewInsets = NO;}

示例效果图

UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0, 0.0, self.view.frame.size.width, 120.0)];[self.view addSubview:imageView];imageView.image = [UIImage imageNamed:@"image.jpg"];
未设置适配:                                                       已设置适配: