假设在UINavigationController内设置一个UIViewControlller,而UIViewController的第一个子视图是UIScrollView的话,UIScrollview里面全部的subView都会发生下移,如图所看到的

代码为

- (void)viewDidLoad

{

[super viewDidLoad];

UIScrollView *tempScroll = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 64, 320, 200)];

[tempScroll setBackgroundColor:[UIColor grayColor]];

[tempScroll setContentSize:CGSizeMake(self.view.bounds.size.width, self.view.bounds.size.height)];

[self.view addSubview:tempScroll];

UIButton *tempButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];

[tempButton setBackgroundColor:[UIColor redColor]];

[tempButton setTitle:@"subView A" forState:UIControlStateNormal];

[tempButton setFrame:CGRectMake(80, 0, 80, 100)];

NSLog(@"%d",tempScroll.subviews.count);

[tempScroll addSubview:tempButton];

}

经过验证性的代码,我发现ios7有一个机制

在navigationBar,以及statusBar都显示的情况下,Navigation的当前VC,他的VC的view的子视图树的根部的第一个子视图,假设是Scrollview的话,这个scrollview的全部子视图都会被下移64个像素。

发现了这个机制之后,怎么去修正呢?

修正方案有两个

1、把scrollview的全部子视图上移64个像素。

UIView *targetView = self.view;

while (targetView.subviews.count >0 &&
![targetView isKindOfClass:[UIScrollView class]]) {

targetView = [targetView.subviews objectAtIndex:0];

}

if ([targetView isKindOfClass:[UIScrollView class]])
{

NSLog(@"you are a scrollview");

CGSize tempSize = ((UIScrollView *)targetView).contentSize;

tempSize.height -= 64;

[(UIScrollView *)targetView setContentSize:tempSize];

for (UIView *subView in targetView.subviews)
{

CGRect tempRect = subView.frame;

tempRect.origin.y -= 64;

[subView setFrame:tempRect];

}

}

2、把scrollView更改地位,是它不是子视图树的根部第一个子视图。

- (void)viewDidLoad

{

[super viewDidLoad];

UIView *tempBackGround = [[UIView alloc] initWithFrame:self.view.bounds];

[self.view addSubview:tempBackGround];

UIScrollView *tempScroll = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 64, 320, 200)];

[tempScroll setBackgroundColor:[UIColor grayColor]];

[tempScroll setContentSize:CGSizeMake(self.view.bounds.size.width, self.view.bounds.size.height)];

[self.view addSubview:tempScroll];

UIButton *tempButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];

[tempButton setBackgroundColor:[UIColor redColor]];

[tempButton setTitle:@"subView A" forState:UIControlStateNormal];

[tempButton setFrame:CGRectMake(80, 0, 80, 100)];

NSLog(@"%d",tempScroll.subviews.count);

[tempScroll addSubview:tempButton];

}

经过了修正如图所看到的

ios7 UIScrollView 尺寸问题的更多相关文章

  1. iOS7中弹簧式列表的制作

    本文转载至 http://www.devdiv.com/forum.php?mod=viewthread&tid=208170&extra=page%3D1%26filter%3Dty ...

  2. UINavigationController + UIScrollView组合,视图尺寸的设置探秘(一)

    UINavigationController和UIScrollView是iOS下几种主要的交互元素,但当我搭配二者在一起时,UIScrollView的滚动区域出现了很诡异的现象.我希望UIScroll ...

  3. IOS7官方推荐图标和图像尺寸

    图标和图像大小 每一个应用程序需要一个应用程序图标和启动图像.此外,一些应用程序需要自定义的图标来表示特定于应用程序的内容,功能,或在导航栏,工具栏和标签栏模式. 不像其他的定制艺术品在您的应用程序的 ...

  4. UINavigationController + UIScrollView组合,视图尺寸的设置探秘(三)

    还是在苹果的 View Controller Catalog for iOS 文章中找到答案.文中提到了两点: 1.If the navigation bar or toolbar are visib ...

  5. UINavigationController + UIScrollView组合,视图尺寸的设置探秘(二)

    承接上文,我想把view布局修改为如下模式,让ScrollView长在NavigationBar的下方,这总不会有遮挡的问题了吧: story board内容如下,主要是右侧视图蓝色区域添加了Scro ...

  6. 你真的了解UIScrollView吗?

    一:首先查看一下关于UIScrollView的定义 NS_CLASS_AVAILABLE_IOS(2_0) @interface UIScrollView : UIView <NSCoding& ...

  7. 内外分离接口依赖及UIScrollView知识点

    1:Class Extension 还能巧妙的解决一个接口暴露问题 有些属性或者方法对外可以提供,有些只针对内部的类进行调用: // Sark.framework/Sark.h @interface ...

  8. iOS-scrollview及其子类适配iOS7

    问题描述: 在iOS7之后如果在导航控制器中所属的字控制器中嵌入scrollview及其子类的视图,当scrollview的尺寸太小的话不会调用返回cell的方法.控制器的嵌套层级结构如下图所示,着重 ...

  9. UIScrollView的封装

    UIScrollView的封装 效果 特点 1.用法简单,尺寸大小,随意设置位置 2.可以有多个数据源的数据,可以定制不通的界面(如同上图,一个有文字,一个没有文字) 3.能够实现点击事件 用法 1. ...

随机推荐

  1. python3.5之输出HTML实体字符

    出  关①   徐兰 凭山俯海古边州, 旆②影风翻见戍楼. 马后桃花马前雪,出关争得不回头? [注]关,指居庸关.②旆(pèi),旌旗. 刚刚学习用python写爬虫,实战一下. 抓取出一个网页的内容 ...

  2. Puppet的执行过程

    图1 Puppet工作流程 1. 客户端Puppetd向Master发起认证请求,或使用带签名的证书. 2. Master告诉Client你是合法的. 3. 客户端Puppetd调用Facter,Fa ...

  3. python之lambda表达式

    lambda函数小结 1.lambda表达式: 以前看人家写一个长式子就能干一件我写一个函数干的事情觉得好帅,现在通过学习知道了lambda表达式其原理就是一个函数,而且是一个只能处理简单功能的函数. ...

  4. 一键搞定Java桌面应用安装部署 —— exe4j + Inno Setup 带着JRE, 8M起飞

    转载自:http://www.blogjava.net/huliqing/archive/2008/04/18/193907.html 对于作Java桌面应用来说,比较烦人的就是安装部署问题,客户端是 ...

  5. Httpservlet cannot be resolved to a type

    这个问题与上个问题可以说是“错的类似”.解决方案:就是在Tomcat的lib目录下加入servlet-api.jar 即可.

  6. 张孝祥Java高新技术汇总

    一.自动装箱和拆箱: 在Java中有8种基本数据类型:byte,short,int,long,float,double,char,boolean.而基本数据类型不是对象,这时人们给他们定义了包装类,使 ...

  7. 关于express4不再支持body-parser

    express的bodyParser能将表单里的数据格式化,bodyParser原是绑定在express中的,但从express4开始,不在绑定了 如果依然直接使用app.use(express.bo ...

  8. LNNVL函数使用

    显示那些佣金比例(commision)不大于20%或者为NULL的员工的信息. CREATE TABLE plch_employees (     employee_id      INTEGER P ...

  9. Models——英语学习小技巧之四

    Models  are very important, here model means role model, is kind of like a hero. It's  someone that ...

  10. Android 用属性动画自定义view的渐变背景

    自定义view渐变背景,同时监听手势自动生成小圆球. 宿主Activity如下: package com.edaixi.tempbak; import java.util.ArrayList; imp ...