美文网首页常用技术收集权哥的技术之路iOS程序猿
iOS下的界面布局利器-MyLayout布局框架

iOS下的界面布局利器-MyLayout布局框架

作者: 欧阳大哥2013 | 来源:发表于2017-03-10 09:02 被阅读3286次

参考的文章地址: http://floriankugler.com/2013/04/22/auto-layout-performance-on-ios/

应用场景

举例下面一个应用场景:

  • 有一个容器视图S的宽度是100而高度则是由四个从上到下依次排列的子视图A,B,C,D的高度总和。
  • 视图A的左边距占用父视图宽度的20%,而右边距则占用父视图宽度的30%,高度则等于自身的宽度。
  • 视图B的左边距是40,宽度则占用父视图的剩余宽度,高度是40。
  • 视图C的宽度占用父视图的所有宽度,高度是40。
  • 视图D的右边距是20,宽度是父视图宽度的50%,高度是40。

最终的效果图如下:

![demo](https://raw.githubusercontent.com/youngsoft/TangramKit/master/TangramKitDemo/Support Files/usagedemo.png)


    MyLinearLayout *S = [MyLinearLayout linearLayoutWithOrientation:MyLayoutViewOrientation_Vert];
    S.subviewSpace = 10;
    S.myWidth = 100;
    
    UIView *A = UIView.new;
    A.leftPos.equalTo(@0.2);
    A.rightPos.equalTo(@0.3);
    A.heightSize.equalTo(A.widthSize);
    [S addSubview:A];
    
    UIView *B = UIView.new;
    B.leftPos.equalTo(@40);
    B.widthSize.equalTo(@60);
    B.heightSize.equalTo(@40);
    [S addSubview:B];
    
    UIView *C = UIView.new;
    C.widthSize.equalTo(S.widthSize);
    C.heightSize.equalTo(@40);
    [S addSubview:C];
    
    UIView *D = UIView.new;
    D.rightPos.equalTo(@20);
    D.widthSize.equalTo(S.widthSize).multiply(0.5);
    D.heightSize.equalTo(@40);
    [S addSubview:D];
    

系统结构

MyLayout演示效果图

链接:

欢迎大家访问我的github站点,并关注@欧阳大哥2013 关注我的个人主页

相关文章

网友评论

  • 见嗳生:用MYFlowLayout写流动布局时,如何获取最后一次添加到MYFlowLayout上的控件的 frame?
    欧阳大哥2013:子视图有一个viewcompeleteblock属性能获取
  • 朱Younger:相对布局里面、视图B 顶部 距离 A视图 底部20个像素、如果根据服务器逻辑隐藏B视图、距离的20 个像素还在,如何隐藏?
    朱Younger:@欧阳大哥2013 大哥理解的非常正确,事实上C距离B的底部也是20个像素,那么隐藏 B后,C距离A的底部变成了40个像素。如果隐藏 B,B对应A底部的约束变成0就好了,那么这时候C距离 A的底部刚好20,完美。你的框架很棒
    欧阳大哥2013:您的代码是: B.topPos.equalTo(A.bottomPos).offset(20); 吗?而且您还有另外一个视图C的topPos依赖于B的bottomPos对吗?所以您认为隐藏了B后,觉得C应该在A的下面而不再有20的间隔对吧。
    目前的设计就是这样的,会有20的间距。可以想象一下正常情况下B距离A有20的间隔,而C又是在B的下面的,因此如果将B隐藏后其实可以理解为B是不存在的,而是变为了C距离A有20的间隔,相当于把C顶上去了。
  • 码蚁居然被用过了:计算frame貌似在主线程?
    码蚁居然被用过了:@码蚁居然被用过了 我看frame的计算逻辑都是一些数学计算,应该不需要在主线程吧?
    码蚁居然被用过了:@欧阳大哥2013 为什么不考虑在非主线程计算frame,然后在主线程渲染呢
    欧阳大哥2013:@码蚁居然被用过了 是的
  • objcat:欧阳大哥,ios怎么实现 android:layout_width="wrap_content"
    父视图完全容纳子视图,而不需要做多余的操作
    欧阳大哥2013:你设置布局视图的属性 wrapContentWidth为YES即可
  • 星好唯柔:测试
    f2f45b0e1a6b:强大:+1: 收藏 http://www.ctolib.com/youngsoft-MyLinearLayout.html
  • MrZombie:一直用Masonry,是不是这个更好用啊
    MrZombie:@欧阳大哥2013 嗯嗯谢谢
    欧阳大哥2013:是这样的。MyLayout集成了市面上主流的布局解决方案。Masonry可以说只是其中的一个布局方案子集。建议您下载DEMO。然后了解一下这个布局库。
  • iAstrolien:你这样真的好么? 每一次布局都要多加一次view
    欧阳大哥2013:@iastrolien 布局库的一些例子就是比较复杂页面的实现,你可以参考一下。。
    iAstrolien:@欧阳大哥2013 从不 使用xib。 并且,你这样使用 不感觉 太费劲了么~~ 我遇到复杂页面怎么办?
    欧阳大哥2013:@iastrolien 你可以和XIB结合着使用,把self.view里面的视图设置为一个布局视图就好了。另外你也可以把根视图设置为一个布局视图,实际上是不会增加一个次view的。
  • 圣罗迦奈:我的乖乖 这可着实了得
  • 7emini:可以,很强势

本文标题:iOS下的界面布局利器-MyLayout布局框架

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