`

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

分享到:
评论

相关推荐

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

    xamarin学习笔记B06(ios的Autolayout布局技术)Autolayout是一种自动布局技术,很方便进行屏幕适配。

    swift-iOS使用SizeClasses进行各型号横竖屏的屏幕适配

    iOS使用SizeClasses进行各型号横竖屏的屏幕适配,不同机型不同屏幕方向使用不同的布局和不同的图片

    一个功能强大的IOS布局类库

    这是一个功能强大的IOS布局类库,他提供了MyLinearLayout线性布局,MyRelativeLayout相对布局,MyFrameLayout的框架布局,可以适配各种屏幕尺寸,屏幕旋转和各种操作系统 ,不需要去学习AutoLayout 测试环境:Xcode...

    ios-用Swift编写的一套iOS界面布局框架:TangramKit.zip

    他集成了iOS的AutoLayout和SizeClass以及Android的五大容器布局体系以及HTML/CSS中的float和flex-box的布局功能和思想,目的是为iOS开发人员提供一套功能强大、多屏幕灵活适配、简单易用的UI布局解决方案。...

    ios-自动布局系列代码(包括xib、storyboard、autoresizing、autolayout size class).zip

    细谈屏幕适配和界面开发辅助工具

    iOS autolayout+scrollview

    使用纯代码编写的iOS中UIScrollView用autolayout布局适配不同屏幕

    iOS开发~UI布局

    随着iOS8系统的发布,一个全新的页面UI布局概念出现,这个新特性将颠覆包括iOS7及之前版本的UI布局方式,这个新特性就是SizeClass。SizeClass配合AutoLayout可以解决所有(包括iPhone及iPad)iOS设备屏幕尺寸及屏幕...

    详解iOS自动布局框架Masonry

    目前iOS开发中大多数页面都已经开始使用InterfaceBuilder...所以一般用纯代码开发UI的话,一般都是配合一些自动化布局的框架进行屏幕适配。苹果为我们提供的适配框架有:VFL、UIViewAutoresizing、AutoLayout、SizeCla

    ios案例代码

    ios代码,包括:超级猜图,图片轮播器,汤姆猫,图片按钮动画,计算器,九宫格下载程序,喜马拉雅电台,汽车品牌展示,团购案例,微博案例,QQ聊天布局,自动布局,屏幕适配,等十几个案例程序,希望对ios初学者有所...

    详解iOS 关于字体根据不同屏幕尺寸等比适配的问题

    此项目支持的设备从4S开始一直到6+,也就是说屏幕的尺寸最小的320×480 最大的1242×2208 (不过目前好像大部分的App都会这样去支持),而客户那边有一个奇葩要求 就是所有的控件布局必须依据屏幕的尺寸等比缩放。...

    iOS应用开发中使用Auto Layout来适配不同屏幕尺寸

    主要介绍了iOS应用开发中使用Auto Layout来适配不同屏幕尺寸的方法,根据Xcode IDE下的实际调试步骤讲解其用法,需要的朋友可以参考下

    iOS界面视图布局框架

    它集成了:iOS Autolayout和SizeClass、android的5大布局体系、HTML/CSS的浮动定位技术以及flex-box和bootstrap框架等市面上主流的平台的界面布局功能,同时提供了一套非常简单和完备的多屏幕尺寸适配的解决方案。...

    flutter 屏幕尺寸适配和字体大小适配的实现

    前言: 现在的手机品牌和型号越来越多,导致我们平时写布局的时候会在个不同的移动设备上显示的效果不同, 比如我们的设计稿一个View的大小是300px,如果直接写300px,可能在当前设备显示...flutter 屏幕适配方案 gi

    自动适配屏幕的网格布局效果

    该源码实现可自动适配屏幕的网格布局效果,当我们切换到横屏或竖屏时,屏幕自动调整屏幕的大小以及位置等,而且不但可以设置好每个网格的间距效果,还可以设置每行网格的数目等,喜欢的ios开发朋友可以下载研究一下...

    IOS自适配利器Masonry使用指南

    如果说自动布局解救了多屏幕适配,那众多三方库的出现就解救了系统自动布局的写法。Masonry就是其中一个。用法上也比较简单灵活,很大程度上替代了传统的NSLayoutConstraint布局方式。下面我们就来具体探讨下吧

    UI设计规范UI案例分析UI入门教程等培训技术文档资料(44个).rar

    关于Android的多种屏幕适配.pdf17.Android设计.pdf18.IOS设计和开发必备.pdf19.关于手机屏幕的几个参数:屏幕大小、分辨率、PPI.pdf20.app规范.pdf21.IOS设计指南参考.pdf22.移动端APP设计指南.pdf23.移动终端开发...

    iosWebView:在Unity显示上方添加iOS WKWebView,同时允许用户查看和使用您的Unity UI

    iOSUnityWebView 本教程介绍了如何使用... 本教程将创建一个WKWebView,然后调整其框架以在布局的顶部留出空白,因此Unity屏幕的某些部分仍然可见并可以进行交互。 可以在以下位置找到本教程的视频: @cwgtech

    HTML网站源码-iOS手机APP开发响应式网页模板-适配移动端&PC端.zip

    它采用了最新的HTML5和CSS3技术,具有响应式设计,能够适应不同设备的屏幕尺寸。此外,它还包含了丰富的JavaScript插件,可以实现各种复杂的交互效果。这套源代码文件还具有高度的可定制性。您可以根据自己的需求对...

Global site tag (gtag.js) - Google Analytics