美文网首页
iOS界面开发需要用Point乘以屏幕比例系数吗

iOS界面开发需要用Point乘以屏幕比例系数吗

作者: Karos_凯 | 来源:发表于2018-02-10 17:18 被阅读72次

    iOS界面开发需要用Point乘以屏幕比例系数吗

    现状

    由于公司给 app 设计的效果图是基于 iPhone 6 的,效果图的宽度是 375 point。为了适应大小屏幕,我们专门封装了一个函数来获取一个适配的点。

    inline CGFloat Point(void)
    {
        static CGFloat point;
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            point = ([UIScreen mainScreen].bounds.size.width / 375.0f);//以iPhone6为标准的比例值
        });
        
        return point;
    }
    

    所以在使用的时候,就会是效果图上里面的点乘以适配点。比如一张 140 x 140 图片距离屏幕左边 20 点。

    UIImageView *imageView = [UIImageView new];
    imageView.frame = CGRectMake(20 * Point(), 0, 140 * Point(), 140 * Point());
    

    这样的话,在大屏幕里面,间距和图片大小都会比效果图更大,

    在小屏幕里面,间距和图片大小都会比效果图更小,这样就可以适配小屏幕了。

    虽然这样很好的适配小屏幕,但是会让大屏幕的间距看起来很大,总体看起来没有很好的利用空间。比如距离左边 20 点,在 7p 上就是 22.08,会多出 2.08 的点,这样就会距离左边更大了。

    20 * Point() = 20 * 1.104 = 22.08
    

    两种常用的计算方式

    1. 点乘以系数,既 n * Point(),这就是上面所说的方式。
    2. 就是直接使用点,这样的话就可以在不同的屏幕空间之间的间距就是一样的了,不会造成像方式一在大屏幕上的空洞感。但是缺点就是,如果在一行上所有的控件都是固定宽度并且超过最小屏幕的话,就不适用了,如果真有这种情况,那我觉得设计上就不对了,在设计上至少要让一行上某一个控件自适应。

    优酷用的是什么方式呢?

    优酷是怎么处理这个问题的呢?
    我用 Reveal 捕获了优酷在 5s(越狱) 上的界面,然后在 7p(系统版本高了,越不了监狱) 做了截图。

    然后用 ps 工具对 7p 上的截图做了尺寸获取,并与 5s 上的 reveal 界面进行对比。发现这两个机型下,九宫格图片距离屏幕左边都是 9 个点,九宫格图片之间的距离都是 3 个点,包括头像左右,上下,还有头像大小都是一样的。

    iPhone 5s:


    优酷_5s.PNG

    iPhone 7 Plus:


    优酷_7p_结论就是不管屏幕尺寸还是按点去布局.PNG

    淘宝用的是什么方式呢?

    淘宝是怎么处理这个问题的呢?
    我用 Reveal 捕获了淘宝在 5s(越狱) 上的界面,然后在 7p(系统版本高了,越不了监狱) 做了截图。

    淘宝对比的结果跟优酷一样的,在间距上都是用的点。图片的大小都是 140 点。图片上下的间距都是 6 点。

    iPhone 5s:


    淘宝_5s_标题是14号字体.PNG

    iPhone 7 Plus:


    淘宝_7p_结论就是不管屏幕尺寸还是按点去布局.PNG

    我来看看淘宝在 5s 上的字号与 7p 上字号是否一致。

    iPhone 5s 上标题的字号是 14。


    淘宝截图1.jpg

    iPhone 7 Plus 上的字号也是 14,字号与 5s 上的是一样的。


    淘宝_7p_结论是标题在大小屏幕是14号字体.png

    总结

    经过上面的对比,我们可以发现直接用点去布局,才是合理的,可以更好的利用屏幕空间,让大小屏幕在观感上有一致的体验。而且也会少了很多像素不对齐的情况。

    相关文章

      网友评论

          本文标题:iOS界面开发需要用Point乘以屏幕比例系数吗

          本文链接:https://www.haomeiwen.com/subject/fkqhtftx.html