• 解决UIScrollview无故偏移和导航条遮挡view的问题


    1.设置自动调整scrollview的 inset

    self.automaticallyAdjustsScrollViewInsets = NO;

    简单点说就是automaticallyAdjustsScrollViewInsets根据按所在界面的status bar,navigationbar,与tabbar的高度,自动调整scrollview的 inset,设置为no,不让viewController调整。

    注:自己代码的问题在于自定义了一个navigationbar,因而系统自己判定并适配,设置 self.automaticallyAdjustsScrollViewInsets = NO 才达到了效果。

    2.ios7.0以后状态栏和导航条遮住view

    方案一:

    //这句话的意思就是让导航栏不透明且占空间位置,所以我们的坐标就会从导航栏下面开始算起。
    self.navigationController.navigationBar.translucent = NO;

    方案二:

        
    //edgesForExtendedLayoutios7的新属性,所以在ios7以下设备会出现奔溃现象,解决办法就是先判断在使用,可以通过判断系统版本,也可以通过判断方法是否可使用
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) { self.edgesForExtendedLayout = UIRectEdgeNone; self.extendedLayoutIncludesOpaqueBars = NO; self.modalPresentationCapturesStatusBarAppearance = NO; }

    注:

    1.edgesForExtendedLayout

     edgesForExtendedLayout默认的值是UIRectEdgeAll就是全部布局的意思,改成UIRectEdgeNone就会和ios7之前的系统版本一样的效果

    2.extendedLayoutIncludesOpaqueBars

    如 果状态栏是不透明的,那么页面的布局默认是不会包含状态栏的,除非将这个属性设置成为YES。所以如果你的页面扩展到Navigation Bar (edgesForExtendedLayout=UIRectEdgeAll),要是这个属性设置成NO (default), 如果状态栏是不透明的话,页面是不会扩展到状态栏的。

    3.modalPresentationCapturesStatusBarAppearance

    iOS7以前不能针对每一个UIViewController单独控制状态栏的显示隐藏,只能在需要的时候调用setStatusBarHidden/setStatusBarStyle修改状态栏显示或者样式,iOS7以后,状态栏是透明的。plist参数多了一个View controller-based status bar appearance。

    如果View controller-based status bar appearance 为NO,则表示状态栏不受UIViewController的单独控制,那么这个时候状态栏的控制还和iOS7以前的方式一样,在需要修改的地方执行setStatusBarHidden。

    而如果设置为YES,则状态栏会根据各个UIViewController的配置改变,UIViewController中如果需要改变状态栏则需要重载以下两个方法:

    - (UIStatusBarStyle)preferredStatusBarStyle  
    {  
        return UIStatusBarStyleLightContent;//状态栏样式  
    }  
      
    - (BOOL)prefersStatusBarHidden  
    {  
        return NO;//状态栏是否隐藏  
    }

    UIViewController初始化的时候会自动执行这个两个方法,之后如果需要刷新状态栏样式的时候,调用[self setNeedsStatusBarAppearanceUpdate]即可,系统会自动调用这两个方法。

  • 相关阅读:
    Deepin 安装成功后开机进入系统黑屏
    Widows 关闭 Defender的方法
    yapi
    spring boot集成minio,最新版
    Minio第一课:走进 Minio
    Docker与IPtables
    解决:required a single bean, but 2 were found:
    Python之Beautiful Soup 4使用实例
    mysql -5.7.31 修改root密码
    mybatis/tk mybatis下实体字段是关键字/保留字,执行报错
  • 原文地址:https://www.cnblogs.com/tangaofeng/p/5364324.html
Copyright © 2020-2023  润新知