美文网首页
串哥的Autolayout笔记+Masonry

串哥的Autolayout笔记+Masonry

作者: rxdxxxx | 来源:发表于2016-01-04 09:22 被阅读1539次

    Masonry

    AutoLayout相当于一个公式
    view1.attr1 = view2.attr2 * mul + constant
    这里就有7个变量.进行控制这个公式.

    Masonry的代码样式,是建造者模式.

    • Attribute
    - (MASConstraint *) left;
    - (MASConstraint *) top;
    - (MASConstraint *) right;
    .....
    - (MASConstraint *) baseline;// 字体的基线
    
    
    // 此下三个值就是上面基础值的组合.
    - (MASConstraint *) edges;
    - (MASConstraint *) size;
    - (MASConstraint *) center;
    
    
    // iOS8以后出现的, view四周有个margin宽,类似于护城河.
    - (MASConstraint *) leftMargin;
    - 
    
    // 在iOS7中加入了
    // 这几个layout值是控制器的值. 而不是控制器中View的值.   
    mas_topLayoutGuide;
    mas_bottomLayoutGUide;
    
    mas_topLayoutGuideTop;
    mas_topLayoutGuideBottom;
    mas_bottomLayoutGuideTop;
    mas_bottomLayoutGuideBottom;
    
    

    但是控制器有了上面一个guide属性后,会对起中view会产生一些layout影响

    // 关闭控制器中,关于控制的延伸layout.
    self.edgesForExtendedLayout = UIRectEdgeNone; 
    
    // 这个是为Scroll设置一个Inset值.
    self.automaticallyAdjustsScrollViewInsets = NO;
    
    

    Masrony的一些使用

            UIView *v1 = ({
            UIView *view = [UIView new];
            view.backgroundColor = [UIColor redColor];
            [self.view addSubview:view];
            [view mas_makeConstraints:^(MASConstraintMaker *make) {
                make.size.mas_equalTo(CGSizeMake(50, 59));
                
                make.center.equalTo(self.view);
    
            }];
            
            view;
        });
    
        
        
        UIView * v2 = ({
            
            UIView *view = [UIView new];
            view.backgroundColor = [UIColor blueColor];
            [self.view addSubview:view];
            [view mas_makeConstraints:^(MASConstraintMaker *make) {
                
                make.size.mas_equalTo(CGSizeMake(50, 59));
                make.left.and.top.equalTo(v1);
                
            }];
            
            view;
    
            
        });
    
    
    

    Masrony中相等关系的选择

    • greaterThanOrEqualTo >=
    • lessThanOrEqualTo <=
    • equalTo ==

    Constant 偏移量

    • offset
    • insets
    • sizeOffset
    • centerOffset
    • valueOffset // 上面几种的封装

    Multiplier 倍数

    • (MASConstraint * (^)(CGFloat multiplier))multipliedBy
    • (MASConstraint * (^)(CGFloat divider))dividedBy

    Priority 约束优先级

    • (MASConstraint * (^)(MASLayoutPriority priority))priority;
    • (MASConstraint * (^)())priorityLow;
    • (MASConstraint * (^)())priorityMedium;
    • (MASConstraint * (^)())priorityHigh;

    intrinsicContentSize

    !重要概念
    一个控件的缺省大小或是默认大小.
    这个控制就是UILabel的高度

    // UIView的方法
    - (void)intrinsicContentSize; 
    - (void)invalidateIntrinsicContentSize NS_AVAILABLE_IOS(6_0); // call this when something changes that affects the intrinsicContentSize.  Otherwise UIKit won't notice that it changed.  
    
    

    如果没有设置一个View的Width或者Height,那么AutoLayout就会用intrinsicContentSize来作为参考.

    Content Priority

    !重要概念
    就是在你被拉伸的时候,查看这个优先级,那么就会决定哪个View会被拉伸或者压缩
    ContentComPressIonResistance
    contentHuggingPriority

    [view setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal];
    

    设置这个方法,可以让这个view再有被拉伸情况的时候,保持高的优先级不被拉伸.

    [view setContentCompressionResistancePriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal];
    

    设置这个方法,可以让这个view再有被压缩情况的时候,保持高的优先级不被压缩.

    Animation

    • Core Animation 改变View或layer的各种属性值.
    • POP FaceBook的一个动画库

    UIScrollView

    需要确认两点
    1,窗口大小: bounds
    2,内容大小: contentSize

    scrollView和其子控件的约束决定了-> ContentSize
    scrollView和其父控件的约束决定了-> Frame

    这里有一个技巧:
    可在scroll中添加一个view层,用其他的控件与这个view进行控件尺寸的约束,然后用这个view与scrollView的edge进行约束,如此做后在迁移复用时,就可以隔离ScrollView,利用View进行便利的迁移.

    UIStackView

    • iOS9+

    • FDStackView iOS6+ 可以看下"sunny怎么了"博客. 实现原理

    • 作用: 将一组view按照一定的规则再一个方向上堆叠起来

    • 本质: 自动生成一组符合规则的约束


    axis 方向分: 水平和垂直
    alignment 对其方式: 居中对其,顶部对齐.....
    distribution 等宽,等高
    spacing 控件间的间距

    用好UIStackView的诀窍
    1,处理好优先级 ->那个需要压缩哪个不需要.
    2,善用Spacer

    Tips

    FDFullscreenPopGesture
    看看串哥写的POP的分类.

    最后附上串哥的博客地址->>here.

    相关文章

      网友评论

          本文标题:串哥的Autolayout笔记+Masonry

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