zoukankan      html  css  js  c++  java
  • 关于iPhone设备不同显示尺寸适配的一些方法

    ------关于适配的理解------

    1、什么是适配?

        适配是对不同硬件和系统软件的适应,硬件包括屏幕显示,处理器,内存等等(目前主要是屏幕适配,iPhone 6s新增了3D Touch功能,其他硬件功能并没有实质性的改变),软件主要是不同iOS系统(有些在最新系统(通常会尽量向下兼容)不再支持的方法都需要做一些判断)。

    2、为什么要适配?

         适配是为了兼容不同的设备。

    3、屏幕适配主要有哪些方式?

        (1)等比例适配(所有视图按屏幕大小缩放,相对位置不变):a、纯代码;b、代码+storyboard(不使用自动布局);c、代码+storyboard(使用自动布局)。

        (2)自由适配(主要使用自动布局):由于同一布局在不同大小的屏幕上显示效果不一样,如果仅仅是等比缩放,有时显示效果差强人意;在显示内容尺寸符合操作习惯(这个看自己咋想)的情况下,屏幕大小最大的区别是屏大显示内容多(如浏览新闻等,除了只有一些固定图片、控件等的简洁界面),a、约束内容的间距及相对大小;b、约束内容的宽高及相对位置;c、约束内容的间距、宽高。

    ------适配的一些方法------

    情况一

    (等比适配,代码+storyboard,不使用自动布局,建议用iPhone6的尺寸布局),通过获取屏幕尺寸,重定义CGRectMake,更新所有视图及其子视图的frame,完成等比适配。注意字体、图片,以及tableView、collectionView。

    1、——————AppDelegate.h添加:

    + (void)ergodicView:(UIView *)view;

    2、——————AppDelegate.m添加:

    #define ScreenHeight [UIScreen mainScreen].bounds.size.height

    #define ScreenWidth [UIScreen mainScreen].bounds.size.width

    #define ScreenScaleX (ScreenWidth/375)//相对于苹果6屏幕

    #define ScreenScaleY (ScreenHeight/667)

    //按屏幕自动适配storyBoard所有视图

    + (void)ergodicView:(UIView *)view{

        

        if (view.subviews.count != 0) {

            for (UIView *temp in view.subviews) {

                temp.frame = CGRectMake1(temp.frame.origin.x, temp.frame.origin.y, temp.frame.size.width, temp.frame.size.height);

                [self ergodicView:temp];

            }

        }

    }

    //修改CGRectMake

    CG_INLINE CGRect

    CGRectMake1(CGFloat x, CGFloat y, CGFloat width, CGFloat height)

    {

        CGRect rect;

        rect.origin.x = x * ScreenScaleX;

        rect.origin.y = y * ScreenScaleY;

        rect.size.width = width * ScreenScaleX;

        rect.size.height = height * ScreenScaleY;

        return rect;

    }

    --------------------

    情况二

    使用autolayout布局后,可重新设置视图的frame。等viewDidLoad加载完后,再延迟改变视图的frame,不延迟会被storyboard重新设置。也可以在viewDidLayoutSubviews或viewDidAppear重新设置frame

  • 相关阅读:
    团队项目-smart原则
    团队项目-作业管理系统
    团队模式和团队的开发模式是什么,它们有什么关系?
    软件工作量的估计有哪些方法?
    腾讯qq的发展史
    软件过程与项目管理(第二次作业)
    有学生提到,在大学选课的时候,可以写一个“刷课机”的程序,利用学校选课系统的弱点或漏洞,帮助某些人选到某些课程。或者帮助用户刷购票网站,先买到火车票。这些软件合法么?符合道德规范么?是在“软件工程”的研究范围么?
    mysql中explain的type的解释
    php 中类型转换 numfamat、round函数tips
    python client端收不到server端构造的结构体数据
  • 原文地址:https://www.cnblogs.com/aitdsr/p/4951480.html
Copyright © 2011-2022 走看看