Masonry
2016-03-10 22:31
134 查看
原文链接:http://www.jianshu.com/p/028629d9a3fb
view1.attr1 = view2.attr2 * mul + constant
这里就有7个变量.进行控制这个公式.
Masonry的代码样式,是建造者模式.
Attribute
但是控制器有了上面一个guide属性后,会对起中view会产生一些layout影响
lessThanOrEqualTo <=
equalTo ==
insets
sizeOffset
centerOffset
valueOffset // 上面几种的封装
(MASConstraint * (^)(CGFloat divider))dividedBy
(MASConstraint * (^)())priorityLow;
(MASConstraint * (^)())priorityMedium;
(MASConstraint * (^)())priorityHigh;
一个控件的缺省大小或是默认大小.
这个控制就是UILabel的高度
如果没有设置一个View的Width或者Height,那么AutoLayout就会用intrinsicContentSize来作为参考.
就是在你被拉伸的时候,查看这个优先级,那么就会决定哪个View会被拉伸或者压缩
ContentComPressIonResistance
contentHuggingPriority
设置这个方法,可以让这个view再有被拉伸情况的时候,保持高的优先级不被拉伸.
设置这个方法,可以让这个view再有被压缩情况的时候,保持高的优先级不被压缩.
POP FaceBook的一个动画库
1,窗口大小: bounds
2,内容大小: contentSize
scrollView和其子控件的约束决定了-> ContentSize
scrollView和其父控件的约束决定了-> Frame
这里有一个技巧:
可在scroll中添加一个view层,用其他的控件与这个view进行控件尺寸的约束,然后用这个view与scrollView的edge进行约束,如此做后在迁移复用时,就可以隔离ScrollView,利用View进行便利的迁移.
FDStackView iOS6+ 可以看下"sunny怎么了"博客. 实现原理
作用: 将一组view按照一定的规则再一个方向上堆叠起来
本质: 自动生成一组符合规则的约束
axis 方向分: 水平和垂直
alignment 对其方式: 居中对其,顶部对齐.....
distribution 等宽,等高
spacing 控件间的间距
用好UIStackView的诀窍
1,处理好优先级 ->那个需要压缩哪个不需要.
2,善用Spacer
看看串哥写的POP的分类.
最后附上串哥的博客地址->>here.
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 偏移量
offsetinsets
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.
相关文章推荐
- OC-消息发送机制
- 第一次作业-1
- oracle和sqlserver中空值的区别
- 循环语句(2)
- hdu acm 1198 Farm Irrigation
- 深入理解Java 虚拟机(周志明)笔记(六)——Java内存分配
- leetcode101.SymmetricTree
- 树莓派折腾录二. QT5.7在树莓派3上的安装(Raspberry Pi 3 model B)
- 练习题2
- Java递归算法实例
- 自己实现strlen函数
- 用户与组管理
- Java中的流与文件:流
- c_c++
- Python开发简单爬虫
- 怎样在Delphi2007中安装OCX控件
- UITableView介绍 之下拉刷新原理
- Fragment回调了onResume方法却并没有进去前台可见
- 深入理解Java 虚拟机(周志明)笔记(五)——垃圾收集器(三)
- 读《我是一只IT小小鸟》有感