移动端开发iOSiOS Developer

iOS开发自定义View布局子控件

2016-12-14  本文已影响1358人  hello_JSH

iOS开发中,- (void)layoutSubviews{}方法及相关方法注意点!!


文章着重介绍iOS开发中如果给subViews设置fram

layout相关的方法

- (void)layoutSubviews {};
- (void)layoutIfNeeded {};
- (void)setNeedsLayout {};
- (CGSize)sizeThatFits:(CGSize)size {};
- (void)sizeToFit {};
- (void)setNeedsDisplay {};
- (void)drawRect {};

一、-(void)layoutSubviews{}在以下情况下会被调用/被触发??

(在苹果的官方文档中强调:
You should override this method only if the autoresizing behaviors of the subviews do not offer the behavior you want.layoutSubviews, 当我们在某个类的内部调整子视图位置时,需要调用。反过来的意思就是说:如果你想要在外部设置subviews的位置,就不要重写。)

1.1.什么时候,需要重写- (void)layoutSubviews{}呢??
1.2. 如何手动触发这个方法(- (void)layoutSubviews{})?

iOS开发中,开发者不能直接调用这个方法,系统默认不允许我们这样,那怎么在需要的时候,手动触发这个方法呢?下面提供两个方法。。


二、重绘制相关方法

开发者:重新绘制一个崭新的view,需要重写-(void)drawRect:(CGRect)rect {}

1.1.什么时候,需要重写-(void)drawRect:(CGRect)rect {}呢??
1.2. 如何手动触发这个方法(- (void) drawRect:(CGRect)rect{})?

iOS开发中,开发者不能直接调用这个方法,系统默认不允许我们这样,那怎么在需要的时候,手动触发这个方法呢?下面提供两个方法。。


三、其他与布局subViews.frame相关方法

- (CGSize)sizeThatFits:(CGSize)size {};
- (void)sizeToFit {};

注意点:1.无论什么时候调用sizeToFit,其底层实质sizeToFit自动调用sizeThatFits方法。2. -(void)sizeToFit {}不应该在子类中被重写,应该重写 -(CGSize)sizeThatFits:(CGSize)size {},

3.1.sizeToFit的用途?
3.2. sizeThatFits的用途?
3.3.注意:

补充:



后期会更新自动布局相关方法-(void)updateConstraints

- (void)updateConstraints{}
- (BOOL)needsUpdateConstraints{}
- (void)setNeedsUpdateConstraints{}
上一篇下一篇

猜你喜欢

热点阅读