iOS-UI布局是约束(Masonry)还是frame?虽各有优缺点,但使用frame真心没前途

最近在面试以及与其余程序猿(不乏来自BAT大厂)的交流当中,我发现还是有相当大一部分是使用frame,为此也就出现了这篇文章。

在远古时代使用的都是frame,很多4年以上的程序猿都是从frame开始的,但是那个只适用于iPhone 4这个3.5寸的手机,这是因为:frame是绝对布局,一旦设置,其origin(x,y)与size(width,height)便固定死了,不可更改。为此在尺寸不更改以及系统版本不更新的情况下是没问题的,比如一直是3.5寸手机,iOS7系统等,但是这是不可能的。

但是约束(Masonry)就不一样了,约束是一种相对布局,可以很好的适配所有情况,比如比如有无navigationBar,有无tabbar,iPhone X和非iPhone X,还有横竖屏等。这些情况都是动态的,使用约束可以很好的展现。

比如下面这个常见VC布局:


一个常见的VC布局

如果使用frame就很简单了,代码如下:

    self.view.backgroundColor = [UIColor greenColor];
    
    UIView *blueView = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, 100, 100)];
    blueView.backgroundColor = [UIColor blueColor];
    self.blueView = blueView;
    [self.view addSubview:blueView];
    
    UIView *redView = [[UIView alloc] initWithFrame:CGRectMake(0.0, CGRectGetHeight(self.view.frame) - 100.0, 100.0, 100.0)];
    redView.backgroundColor = [UIColor redColor];
    [self.view addSubview:redView];

但是这个样子隐患非常大:非常不易于拓展。比如有无navigationBar,有无tabbar,iPhone X和非iPhone X,还有横竖屏。倘若一直对frame进行设置,那就太麻烦了。

使用约束(Masonry)就简单多了,链接:《iOS - 适配iPhone X与iOS11最优雅的解决方法,没有之一》。一个if else语句就直接就适配了有无navigationBar,有无tabbar,iPhone X和非iPhone X,还有横竖屏等所有情况。效果如下:

有navigationBar和tabbar的情况

iPhone X横屏

除了这种情况之外,还有一种情况下是使用约束比frame要简单,那就是类似评论功能,其代码链接是《iOS-UITableViewCell自适应高度最优雅的方法》。效果如下:

评论自适应高度

以上是最常见的约束优于frame的两种情况,由此衍生出来的,比如Label根据内容自适应高度等等,都比frame要强的多,那是因为使用frame的话,在给label赋完值之后还会调用一个sizeToFit或者layoutIfNeeded等方法,实在是麻烦,甚至在我看来根本都没法去维护。

这里小编就先对其做一个简单的对照:
1.frame是绝对布局,死值,而约束则既可以设置死值又可以设置一个相对值
2.frame在不同尺寸,不同系统下的适配性很低,也不易拓展,约束则不然、3.frame使用起来简单,但是拓展性较差,而约束对程序猿来说代价比较大,也是比较考验逻辑的
4.最重要的是苹果对约束的支持越来越好,frame已穷途末路

在小编看来:虽然frame使用起来比较简单,但是约束(Masonry)无论是拓展还是适配等方面优势十分大,可以说使用使用frame真心没前途。

个人第三方库:UDUserDefaultsModel

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 深入下一环,才能服务好下一环。今天去搭了东门口的环境,爬到梯子的顶端,把原先的点位拆下来,再换我们的点位上去。虽然...
    许一的差评家学阅读 1,508评论 0 1
  • 上学时,每当发下语文课本,都会仔细的从头看到尾,尤其看到书本里描写的海南岛,小兴安岭,美丽的西沙群岛,台湾的日月潭...
    学着提醒幸福阅读 3,418评论 0 0
  • 一早醒来,看到今天是个睛朗的好天气,在冬季里这样的天气好难得,我决定独自登鼓山看枫叶,这几天天晴加上早晚特别冷,想...
    梦姐阅读 3,991评论 2 5

友情链接更多精彩内容