您的位置:首页 > 其它

Masonry

2016-03-10 22:31 134 查看
原文链接:http://www.jianshu.com/p/028629d9a3fb

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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: