1>sizeToFit: // calls sizeThatFits: with current view bounds and changes bounds size.布局
[button.titleLabel sizeToFit];
让按钮内部的label根据文字内容来计算尺寸code
2>layoutIfNeeded:强制布局控件(强制更新子控件的frame)事件
3>UIView的setNeedsDisplay和setNeedsLayout方法it
1.)setNeedsDisplay会调用自动调用drawRect方法class
drawRect在如下状况下会被调用:变量
一、若是在UIView初始化时没有设置rect大小,将直接致使drawRect不被自动调用。drawRect调用是在Controller->loadView, Controller->viewDidLoad 两方法以后掉用的.因此不用担忧在控制器中,这些View的drawRect就开始画了.这样能够在控制器中设置一些值给View(若是这些View draw的时候须要用到某些变量值).object
二、该方法在调用sizeToFit后被调用,因此能够先调用sizeToFit计算出size。而后系统自动调用drawRect:方法。方法
三、经过设置contentMode属性值为UIViewContentModeRedraw。那么将在每次设置或更改frame的时候自动调用drawRect:。call
四、直接调用setNeedsDisplay,或者setNeedsDisplayInRect:触发drawRect:,可是有个前提条件是rect不能为0。layout
以上1,2推荐;而3,4不提倡
2)而setNeedsLayout会默认调用layoutSubViews
layoutSubviews在如下状况下会被调用:
一、init初始化不会触发layoutSubviews。
二、addSubview会触发layoutSubviews。
三、设置view的Frame会触发layoutSubviews,固然前提是frame的值设置先后发生了变化。
四、滚动一个UIScrollView会触发layoutSubviews。
五、旋转Screen会触发父UIView上的layoutSubviews事件。
六、改变一个UIView大小的时候也会触发父UIView上的layoutSubviews事件。
七、直接调用setLayoutSubviews。