DrawRect layoutSubview

用来画图,

1.这个方法会在intiWithRect时候调用。如果在UIView初始化时没有设置rect大小,将直接导致drawRect不被自动调用。

2、该方法在调用sizeToFit后被调用,所以可以先调用sizeToFit计算出size。然后系统自动调用drawRect:方法。

3、通过设置contentMode属性值为UIViewContentModeRedraw。那么将在每次设置或更改frame的时候自动调用drawRect:。

4、直接调用setNeedsDisplay,或者setNeedsDisplayInRect:触发drawRect:




LayoutSubview


  • 使用addSubview添加时会调用layoutSubView
    • 在被添加到父视图 或添加子视图(如果此视图没有frame或子视图没有frame则不会调用)


  • 设置父视图或子视图Size时会调用
  • 自身的size改变


  • 滚动scrollview 的时候也会调用
  • 设备的orientation(方向)改变时,涉及改变的UIViewControl 的root view
    (此时所有的控件被重新布局,相当于A的frame被改变 那么会调用layoutSubview 而且如果控件有子视图的话会再调用一次layoutSubview)
  • Resizing(拉伸) 一个 控件 也会调用它的父控件的layoutSubview
  • 调用setNeedsLayout时


还有一个重要的点,layoutSubview不是在调用完比如addSubview等方法之后就马上调用,而是会在调用addSubview方法所在的作用域结束之后之后才调用,因此即使你在同一个方法中既使用了addSubViews又更改了frame,也是只会调用一次layoutSubview而已

如果要立即刷新,要先调用[view setNeedsLayout],把标记设为需要布局,然后马上调用[view layoutIfNeeded],实现布局

鏈接:http://www.jianshu.com/p/db23c036998

-(BOOL)needsUpdateConstraints

使用此返回值去决定是否需要 调用updateConstraints作为正常布局过程的一部分。 

- (void)setNeedsUpdateConstraints

当一个自定义view的某个属性发生改变,并且可能影响到constraint时,需要调用此方法去标记constraints需要在未来的某个点更新,系统然后调用updateConstraints.

- (void)updateConstraints

更新约束,自定义view应该重写此方法在其中建立constraints. 注意:要在实现在最后调用[super updateConstraints] 

- (void)updateConstraintsIfNeeded

立即触发约束更新,自动更新布局。

你可能感兴趣的:(DrawRect layoutSubview)