使用UINavigationController后导致UIScollView尺寸变化

来源:互联网 发布:杭州it公司排名 编辑:程序博客网 时间:2024/05/02 20:16

//   转载自,网址: the original address


      在 iOS 7 中,如果某个 UIViewController 的 self.view 第一个子视图是 UIScollView, 同时当这个 UIViewController 被 push 或 initWithRootController 成为 UINavigationController控制的Controller时,这个 UIViewController的 view 的子视图 UIScollView 的所有子视图, 都会被下移 64px。


   


    这个下移 64px 的前提是 navigationBar 和 statusBar 没有隐藏。因为为 statusBar 默认的 Height 是 20px,而 navigatiBar  默认的 Height 是 44px。 


    


    实例:


     1. 在 AppDelegate.m 文件中:


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
  self.window.backgroundColor = [UIColor whiteColor];                              
  //下面两行为增加的代码                                                         
  ViewController *rootViewController = [[ViewController alloc] init];
  [self.window setRootViewController:rootViewController];
 
  [self.window makeKeyAndVisible];
    return YES;
}
  


 


  


   2. 在 ViewController.m 中:


    


- (void)viewDidLoad
{
 [super viewDidLoad];
 UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(30.0,                                                           64.0, 260.0, 300.0)];
 [scrollView setBackgroundColor:[UIColor redColor]];
    
 UIView *view = [[UIView alloc] initWithFrame:scrollView.bounds];
 [view setBackgroundColor:[UIColor blueColor]];
 [scrollView addSubview:view];
    
 [self.view addSubview:scrollView];
}
 


 


   3. 运行后的结果:


     
   4. 现在使用 UINavigationController,  将开始 AppDelegate.m 增加的那两行代码修改成:  


 


 


ViewController *rootViewController = [[ViewController alloc] init]; 
  UINavigationController *navController = [[UINavigationController alloc]
                                 initWithRootViewController:rootViewController];
  [self.window setRootViewController:navController];
 
 


 


 


    5. 现在再次运行程序:






   


   如结果显示, scrollView 背景色为蓝色的子视图位置自动下移了。 而这个下移的距离刚好是 64.0px。


   


    解决方法:


    第一种:在 ViewController 的 init 的方法中增加一行代码:


    


 


self.automaticallyAdjustsScrollViewInsets = NO; 
 


   


    第二种: 让UIScrollView 不要成为 ViewController 的 View 的第一个子视图。具体操作:将 viewDidLoad方法 修改成如下:


 


 


- (void)viewDidLoad
{
 [super viewDidLoad];
 
 UIView *firstSubView = [[UIView alloc] initWithFrame:self.view.bounds];
 [self.view addSubview:firstSubView];
    
 UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(30.0,                                                           64.0, 260.0, 300.0)];
 [scrollView setBackgroundColor:[UIColor redColor]];
    
 UIView *view = [[UIView alloc] initWithFrame:scrollView.bounds];
 [view setBackgroundColor:[UIColor blueColor]];
 [scrollView addSubview:view];
    
 [self.view addSubview:scrollView];
}
   


 


    第三种:将 UIScorllView 的子视图上移 64.0px 。修改 viewDidLoad 方法:


 


 


 UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(30.0,                                                           64.0, 260.0, 300.0)];
 [scrollView setBackgroundColor:[UIColor redColor]];
    
 CGRect viewFrame = CGRectMake(0, -64.0, CGRectGetWidth(scrollView.frame),
                                                                                    CGRectGetHeight(scrollView.frame));
 
  UIView *view = [[UIView alloc] initWithFrame: viewFrame];
  [view setBackgroundColor:[UIColor blueColor]];
  [scrollView addSubview:view];
    
  [self.view addSubview:scrollView];
 
 
</pre><pre class="wp-code-highlight prettyprint linenums:1 prettyprinted" name="code" style="white-space:pre-wrap; word-wrap:break-word; color:rgb(51,51,51); font-size:14px; line-height:26px; background-color:rgb(255,255,255)">
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 太瘦了怎么办80多斤 led吊扇灯坏了怎么办 妹子内裤被看了怎么办 都已婚却相爱了怎么办 喝了很烫的水怎么办 金毛幼犬不吃狗粮怎么办 4孩子受凉了呕吐怎么办 尿多是什么原因造成的怎么办 5岁宝宝老尿床怎么办 五岁了还尿床怎么办 2岁宝宝晚上尿床怎么办 胃疼腹泻稀水怎么办 网购成瘾怎么办 知乎 军人被警察打了怎么办 对高院再审不服怎么办 对高院判决不服怎么办 白色砂锅烧黑了怎么办 手机被偷关机了怎么办 狗被眼镜蛇咬了怎么办 穿高跟鞋脚趾头长茧怎么办 穿皮鞋脚底板疼怎么办 鞋子穿了脚趾痛怎么办 脚被鞋子磨肿了怎么办 脚趾磨出茧子怎么办疼 脚掌长茧走路疼怎么办 脚底磨出茧子疼怎么办 手指上写字有茧怎么办 写字磨的茧子疼怎么办 脚上的大脚骨疼怎么办 脸特别烫 又红怎么办 6岁宝宝发音不准怎么办 3岁宝宝发音不准怎么办 5岁宝宝发音不准怎么办 4岁宝宝发音不准怎么办 被螃蟹夹出血了怎么办 苹果6主板坏了怎么办 键盘掉了一个键怎么办 汽车屏幕砸坏了怎么办 电视的屏幕坏了怎么办 高三孩子早恋该怎么办 高一早恋家长该怎么办