zoukankan      html  css  js  c++  java
  • ios7 UIScrollView 尺寸问题

    假设在UINavigationController内设置一个UIViewControlller,而UIViewController的第一个子视图是UIScrollView的话,UIScrollview里面全部的subView都会发生下移,如图所看到的
    ios7 <wbr>UIScrollView <wbr>尺寸问题
    代码为

    - (void)viewDidLoad

    {

        [super viewDidLoad];

     

        UIScrollView *tempScroll = [[UIScrollView allocinitWithFrame:CGRectMake(064320200)];

        [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(80080100)];

        

        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 allocinitWithFrame:self.view.bounds];

        [self.view addSubview:tempBackGround];

        

        UIScrollView *tempScroll = [[UIScrollView allocinitWithFrame:CGRectMake(064320200)];

        [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(80080100)];

        

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

        [tempScroll addSubview:tempButton];


     

    }

    经过了修正如图所看到的

    ios7 <wbr>UIScrollView <wbr>尺寸问题

  • 相关阅读:
    离鞘剑(四)
    Node.js 蚕食计划(四)—— Express + SQL Server 搭建电影网站
    离鞘剑(三)
    python数据类型(第三弹)
    python数据类型(第二弹)
    python数据类型(第一弹)
    开发工具的安装与使用(总结篇)
    开发工具的安装与使用(第四弹)
    PriorityQueue和PriorityBlockingQueue
    一文弄懂java中的Queue家族
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/4470451.html
Copyright © 2011-2022 走看看