`

iOS布局和屏幕适配的一点总结

 
阅读更多

曾经,iOS开发是不需要考虑屏幕适配问题的,因为只有一种屏幕尺寸。而现在已经有了4种屏幕,4,5,6,6P,因此屏幕适配也成了iOS开发中必须考虑的问题。并且,这4种屏幕的宽高比全部都不一样,所以简单的按比例缩放并不能解决问题。我们最近做的一个APP也处理了屏幕适配,本文简单总结一下

根据屏幕类型判断

我不知道有没有更好的办法,我们的做法是根据设备类型,写一些if...else,或者switch语句

判断机型可以使用screen的height(不能使用width,因为4和5的width是一样的,都是320),也可以使用API里的宏,都差不多。我个人感觉,if...else似乎是不可避免的,虽然有auto layout,但是有一些大的布局改动,或者字体大小,不用判断似乎是无法解决的

比如说,为了达到最佳显示效果,我们在大的屏幕上使用CollectionView,而在4S上使用TableView,用自动布局应该是没有办法做到的。或者根据屏幕的大小,切换字体大小,好像也只能通过if...else来实现

根据屏幕类型适配,代码类似:

if(screenType == LosScreenType6P){
    layout.minimumInteritemSpacing = 30;
}else if(screenType == LosScreenType5){
    layout.minimumInteritemSpacing = 5;
}else{
    layout.minimumInteritemSpacing = 15;
}

frame计算

我们也用了比较多的“硬计算”,比如对于UICollectionView里的每个cell的width,我们是这么处理的:

CGRect rect = [[UIScreen mainScreen] bounds];
screenWidth = rect.size.width;
cellWidth = (screenWidth - 30) / 3;
cellHeight = cellWidth * 0.8 + 50;

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
    return CGSizeMake(cellWidth, cellHeight);
}

我们规定CollectionView里每行有3个单元格,整个section的左右间距是10,列间距是5,因此计算出 (width - 30) / 3就是每个单元格的宽度,单元格的高度也是经过计算写死的

我不太确定这种方式好不好,不过对于这个页面是好使的。类似这种基于屏幕尺寸做计算的方法,APP里在几个页面都有用到

Masonry

Masonry是我们实现屏幕适配的重要手段之一,本质上是界面约束的语法糖。基本上,我们的做法是:大的页面关系,用计算完成;每个小块里面的相对位置关系,用Masonry来做。在有些场景下,Masonry有非常大的优势。比如说:

1、设置某个View的宽高比

[thumbImageView mas_makeConstraints:^(MASConstraintMaker *make) {
    make.top.equalTo(@0);
    make.left.equalTo(@0);
    make.width.equalTo(self);
    make.height.equalTo(thumbImageView.mas_width).multipliedBy(0.8);
}];

此View的宽度与父View同宽,高度是宽度的0.8

2、设置居中,设置相对边距

[authorName mas_makeConstraints:^(MASConstraintMaker *make) {
    make.centerY.equalTo(avatarImageView);
    make.left.equalTo(avatarImageView.mas_right).offset(5);
    make.right.equalTo(@-5);
}];

垂直方向与另一个View对齐,左边距离上一个元素的右边5,右边距离父View右边5

类似这种布局,用frame来写会复杂很多,如果再考虑屏幕适配,需要非常多代码。这类的需求,Masonry堪称神器。不过使用中发现,用Masonry布局的View,我们通常会init,或者initWithFrame:CGRectZero。这个View直到经过Masonry处理以后,它的origin和size才能确定,如果在此之前就用到它的origin和size,就会有问题

整体替换UIView

对于适配后变化不大的页面,把if...else写在UIView里,但是有个别页面,完全要根据设备显示不同的View。这种情况比较适合在Controller里做判断,然后load不同的View

分享到:
评论

相关推荐

    iOS 自动布局及适配iPhone6

    iOS自动布局及适配iPhone6的知识点涵盖了iOS应用开发中界面布局与适配的关键技术,主要包括自动布局(Auto Layout)的使用、屏幕分辨率和像素的处理,以及使用Size Classes来适配不同尺寸的屏幕。 1. 自动布局...

    IOS屏幕适配

    "IOS 屏幕适配" IOS 屏幕适配是 IOS 开发中非常...屏幕适配是 IOS 开发中非常重要的一方面,需要开发者具备丰富的知识和经验,合理使用自动布局和 autosize,适配不同的设备参数和显示效果,提高应用程序的用户体验。

    ios-VFL语言实现AutoLayout,屏幕适配.zip

    在这个"ios-VFL语言实现AutoLayout,屏幕适配.zip"压缩包中,我们很显然会学习如何使用VFL来实现自动布局,从而实现屏幕适配。 **VFL语言基础** 1. **VFL语法**:VFL采用类似于数学方程的格式来定义视图之间的关系...

    百分比布局,屏幕适配

    百分比布局是Android和iOS开发中常见的屏幕适配策略,尤其在现代多设备、多分辨率的环境下,它显得尤为重要。屏幕适配的目标是确保应用程序在各种尺寸和分辨率的屏幕上都能保持良好的视觉效果和用户体验。本篇文章将...

    几行代码帮你完成ios屏幕适配Demo

    在iOS开发中,屏幕适配是一项至关重要的任务,因为设备的屏幕尺寸和分辨率各不相同,包括iPhone、iPad以及不同版本的iOS系统。本Demo旨在通过几行代码帮助开发者快速理解并实现iOS应用的屏幕适配,确保在各种设备上...

    iOS8开发技术(Swift 版)【第3季】__屏幕适配详

    ### iOS8开发技术(Swift版)【第3季】__屏幕适配详解 #### 一、屏幕适配的重要性与考虑因素 在iOS开发过程中,为了确保应用能够在多种设备上正常运行,屏幕适配成为了必不可少的一环。随着苹果不断推出新设备,...

    ios项目适配ios6 ios7

    1. Auto Layout(自动布局):iOS7引入了Auto Layout,这是一个强大的布局系统,用于在不同尺寸和方向的屏幕上自适应地布置UI元素。IosAutolayoutDemo可能包含示例代码,展示了如何使用Auto Layout来创建灵活的界面...

    IOS几种方式的适配

    在iOS开发中,适配是确保应用程序在不同设备和屏幕尺寸上正常运行的关键步骤。本文将深入探讨三种主要的适配方法:XIB( Interface Builder 文件)、代码编程以及Storyboard。 ### XIB适配 XIB(XML Interface ...

    屏幕适配jar包

    屏幕适配是移动应用开发中的一个重要环节,尤其是在Android和iOS平台上,由于设备种类繁多,屏幕尺寸、分辨率差异巨大,不进行适配的话,应用程序在不同设备上的显示效果可能会大相径庭。"屏幕适配jar包"显然是一个...

    iOS屏幕适配开发实用技巧

    在iOS开发中,屏幕适配是一项至关重要的任务,因为不同的设备有着不同的屏幕尺寸和分辨率。以下是一些关于iOS屏幕适配开发的实用技巧。 首先,处理屏幕旋转是适配过程中的一个基本步骤。通过注册`...

    Android屏幕适配主流方案的对比和集成

    在Android开发中,屏幕适配是一项至关重要的任务,因为Android设备拥有广泛的屏幕尺寸和分辨率。本文将详述几种主流的Android屏幕适配方案,并进行对比分析,帮助开发者选择最适合项目需求的方法。 一、密度无关...

    ios-iPad项目-QQ空间屏幕适配.zip

    在iOS开发中,针对iPad设备进行屏幕适配是一项重要的任务,因为iPad提供了更大的显示区域,同时支持横屏和竖屏两种模式。"ios-iPad项目-QQ空间屏幕适配.zip"是一个专门解决这一问题的资源包,它包含了如何在iPad上...

    swift-iOS屏幕自动适配和颜色转换成十六进制

    在Swift进行iOS开发时,理解并熟练运用屏幕适配技术如Auto Layout、Size Classes、Stack Views和Safe Area布局,能确保应用在不同设备上呈现出良好的用户体验。同时,颜色管理中颜色的十六进制转换,使得在iOS和Web...

    xamarin学习笔记B06(ios的Autolayout布局技术)

    为了实现屏幕适配,AutoLayout通常会结合Size Classes一起使用。Size Classes定义了不同设备方向和屏幕尺寸的布局模式,这样你可以为特定的设备配置创建不同的布局。在Xamarin中,同样可以在Interface Builder中设置...

    iOS 14新特性与适配要点

    11. **视图内容的布局**: iOS 14引入了新的视图内容布局方式,如`contentView`的调整,以及更灵活的自动布局约束,开发者需要根据这些更新优化界面布局。 以上只是iOS 14新特性的一部分,还有更多如改进的 Siri ...

    ios path 布局方式

    同时,适配不同的屏幕尺寸和设备方向也是必不可少的。利用Auto Layout和Size Classes可以实现响应式布局,使应用在不同设备上都能保持良好的用户体验。 为了实现"ios path 布局方式",开发者需要对iOS的UI框架有...

    iOS 布局 九宫格

    在iOS开发中,布局是构建用户界面的关键环节,它决定了应用程序元素如何在屏幕上排列和响应用户的操作。"九宫格"是一种常见的布局方式,尤其在展示图标、菜单或选择项时非常实用。在这个项目中,我们将深入探讨如何...

    ReactNative屏幕适配工具

    React Native屏幕适配工具是为了解决在跨平台的移动应用开发中,由于不同设备屏幕尺寸和分辨率差异导致的布局显示问题。React Native作为一个流行的JavaScript框架,允许开发者使用JavaScript和React来构建原生的iOS...

    ios7 ios6(3.5inch,4inch)适配

    4. **尺寸类别(Size Classes)**:尺寸类别是iOS8引入的一个特性,虽然不在iOS6中可用,但了解这一概念有助于理解屏幕适配的原理。尺寸类别可以帮助区分横屏和竖屏,以及不同尺寸的设备。 5. **代码适配**:在某些...

    iOS 横竖屏适配

    在iOS开发中,横竖屏适配是一项至关重要的任务,特别是在设计用户界面和优化用户体验时。随着iPhone设备的广泛使用,用户在不同场景下切换横竖屏已经成为常态,因此开发者必须确保应用程序能在不同屏幕方向下正常...

Global site tag (gtag.js) - Google Analytics