iOS开发记录零碎之所征服iOS

AutoLayout/非AutoLayout下,如何布局子控件?

2015-08-14  本文已影响2523人  hello_JSH

关于UIView的Layer,IOS提供了三个方法:

- (void)creatAutoLayoutUSE
{
    // 一、使用AutoLayout布局:自定义- (void)updateConstraints{}
    // 二、不使用AutoLayout/AutoResizing布局:自定义- (void)layoutSubviews{}
    // 三、总结:(推荐直接查看)
}

一、基于约束的AutoLayer的方法:

1. setNeedsUpdateConstraints###

2. updateConstraintsIfNeeded###

3. needsUpdateConstraints###

4. updateConstraints###

Auto Layout Process 自动布局过程

第一步:updating constraints###

第二步:layout###

第三步:display###

二、非自动布局情况下,自定义layoutSubviews设置子空间位置

1. layoutSubviews###

2.setNeedsLayout###

3.layoutIfNeeded###

注意:如果你使用了自动布局时候,每一次调用自定义layoutSubviews都会导致另一个布局传递,那么你将会陷入一个无限循环中

三、总结

view展示、显示在屏幕上之前怎么设置位置?##

1.view设置位置,原理、过程??###

2.分段介绍??###

1.updating constraints:####

* 当用自动布局时,系统自动调用。需要手动重写: - (void)updateContraints {}把添加约束的方法、代码写在这里面。注意调用[super updateContraints];

手动触发####

* setNeedUpdateConstrainsts:标记更改约束了,系统将来自动触发。
* updateConstraintsIfNeeded:告诉系统,在需要时候,更新约束。不是要求系统立即更新当前更改细节。
* 若更改约束后,要求系统立即调用-(void)updateConstraints,立即更新约束:需要同时,调用上面两个方法,且顺序不可变。

2.layout:####

* 当不使用Autoresizing、AutoLayout时,直接使用frame设置位置时,这时,上述方法不需要重写,而是通过重写- (void)layoutSubviews{}来布局子空间的位置。

手动触发####

* setNeedslayout:标记更改了frame,系统将来某个时段自动触发。
* layoutIfNeeded:告诉系统,在需要时,更新frame。不是要求系统立即更新当前更改细节。
* 若更改frame后,要求系统立即调用- (void)layoutSubviews{}重新设置空间frame:这时,需要 同时调用上面两个方法,且顺序不变。

3.display:####

* (注意:与有无自动布局无关,只是单纯的将控件渲染/展示在屏幕上)当 只需要自身定制一款view时,需要重写
* -(void)drawRect:(CGRect)rect{} 设置view里有什么。例如 手势解锁view、画板view。(注:许多情况与手势、触摸事件紧密连接使用)
* -(CGSize)sizeThatFits:(CGSize)size{} 设置view子空间位置。
* sizeToFit不能重写

手动触发:drawRect:####

* setNeedsDisplay方法:标记为需要重绘,异步调用drawRect
* setNeedsDisplayInRect:(CGRect)invalidRect方法:标记为需要局部重绘

手动触发:sizeThatFits:####

* sizeToFit:调用。

如果喜欢就点赞一下吧!如有不足之处,欢迎各位大神给出建议、意见!!感谢大家的支持!!您们的支持是我继续学习的动力。。。

上一篇 下一篇

猜你喜欢

热点阅读