串哥的Autolayout笔记+Masonry

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)