适配问题-UIScrollView在系统iOS11.0上操作过程中的适配问题

UIScrollView在操作过程中出现页面下调20px或者其他的页面显示的问题

开发中遇到的视图跳动

在开发中经常会遇到UITableView或UIScrollView的显示会跳动,然后网上去查一般都会有一些常规处理方法

  • 自动适配UIScrollView的属性
    在UIViewController中有自动适配UIScrollView的属性automaticallyAdjustsScrollViewInsets,默认是YES,意思就是在加载UIScrollView时(包括它的子类UITableView和UIScrollView),系统会自动去适配,所以如果我们在设置在存在冲突就会造成视图的显示乱位问题。所以一般情况下可以把它设置成NO就可以了。

    self.automaticallyAdjustsScrollViewInsets=NO;

  • 导航栏的半透明属性(translucent)
    在iOS 6开始,导航栏就增加半透明属性(translucent),当使用导航栏时,会因为导航栏的变动造成视图的显示乱位问题.默认显示为NO。

    self.navigationController.navigationBar.translucent=YES

  • UIViewController的边缘布局属性UIRectEdge

    UIRectEdge是个枚举,可固定左右上下的边缘

@requires_authorization
 typedef NS_OPTIONS(NSUInteger, UIRectEdge) {
    UIRectEdgeNone   = 0,
    UIRectEdgeTop    = 1 << 0,
    UIRectEdgeLeft   = 1 << 1,
    UIRectEdgeBottom = 1 << 2,
    UIRectEdgeRight  = 1 << 3,
    UIRectEdgeAll    = UIRectEdgeTop | UIRectEdgeLeft |      UIRectEdgeBottom | UIRectEdgeRight
  } NS_ENUM_AVAILABLE_IOS(7_0);

self.edgesForExtendedLayout = UIRectEdgeNone;

  • iOS 11的系统 之后却发现以前几点可也无法解决
    在iOS 11出现后,我在上面运行却发现设置automaticallyAdjustsScrollViewInsets却是无效的,我是为什么了?
    原来从iOS 11开始,苹果出了iPhone X全面屏手机,上面有了刘海,布局适配方式就有所变化,automaticallyAdjustsScrollViewInsets就不起作用了。但是他新推出了contentInsetAdjustmentBehavior的属性来适配

    contentInsetAdjustmentBehavior也是个枚举

typedef NS_ENUM(NSInteger, UIScrollViewContentInsetAdjustmentBehavior) {
    UIScrollViewContentInsetAdjustmentAutomatic, 
    UIScrollViewContentInsetAdjustmentScrollableAxes,
    UIScrollViewContentInsetAdjustmentNever, 
    UIScrollViewContentInsetAdjustmentAlways
} API_AVAILABLE(ios(11.0),tvos(11.0));

所以需要判断版本号进行设置:

   if (@available(iOS 11.0, *)) {
        self.tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
    }else {
        self.automaticallyAdjustsScrollViewInsets = NO;
    }
  • iOS 11的安全区域safeAreaInsets
    配置iOS11系统的iPhone X手机因为有了刘海,采用safeAreaInsets来获取刘海上方的安全边缘UIEdgeInsets值,需要注意的是非iPhone X上的insets.top是0,而且iPhone X上的insets.top为44.0,而这个值应该只是状态栏的高度为44。

需要注意的是safeAreaInsets只是在iOS11的系统上才用,之前的系统会崩溃

   if #available(iOS 11.0, *) {
            tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentBehavior.never
            let insets = UIApplication.shared.delegate?.window??.safeAreaInsets ?? UIEdgeInsets.zero

        } else {

            automaticallyAdjustsScrollViewInsets = false
      }

以上就是我遇到的相关适配问题!

你可能感兴趣的:(技术)