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"];未设置适配: 已设置适配: