对于重新布局和重绘的理解

来源:互联网 发布:python sys.exit 2 编辑:程序博客网 时间:2024/06/05 09:21

原文转自http://stackoverflow.com/questions/2807137/what-is-the-relationship-between-uiviews-setneedslayout-layoutifneeded-and-lay

重新布局:VC的view里有一个自定义的customView,这个customView的bounds是{0,0,300,300},这个时候,你需要在点击这个customView的时候,让他的bounds扩大到{0,0,500, 500},那么这个时候,customView里面的子控件是依托于这个customView的左上角进行布局的,那么这个时候按照正常的理论,它内部的子控件是需要重新再来调整一次布局的,这个就是重新布局,重新布局的时机很多:比如改变当前view的bounds,旋转屏幕,拖动scrollView

【view layoutSubviews】是一种让人崩溃的写法,因为这个方法的触发时机根本就不是手动去调用,而是通过调用setNeedsLayout或者layoutIfNeeded来触发


setNeedsLayout这个方法是给需要改变的view设置flag(flag就是单独的指一个标志,并不是还是必须就是flag这个变量),标示这个view即将要被重新布局,会唤起layoutSubviews这个方法


如果没有调用layoutIfNeeded,唤起layoutSubViews的时机会是下一次runloop进行重绘内容之前,如果手动调用了这个view的layoutIfNeeded,就会立马调用这个view的layoutSubviews方法进行布局改变

最常见的手动去调用layoutIfNeeded就是,用约束布局的时候,做动画,setNeedsLayout不是重绘,是重新布局,重绘是setNeedsDisplay,既然重新布局,必然也会重绘。那么如果没有调用layoutIfNeeded  但是给setNeedsLayout的flag设置标志要求重绘,那么并不会调用layoutSubviews,时机是下一次的runloop

1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 电视打开显示无信号怎么办 电脑卡怎么办换个驱动 刚开始开淘宝店没人买怎么办 公司有人带自己电脑办公怎么办 组装电脑连不上网怎么办 显卡玩不起吃鸡怎么办 u盘内存是假的怎么办 新买的电脑应该怎么办 海尔一体机电脑开不开机怎么办 苹果笔记本系统坏了怎么办 苹果笔记本电脑电池坏了怎么办 苹果笔记本电脑屏幕坏了怎么办 平板开关键坏了怎么办 平板电脑电池坏了怎么办 平板电脑充电口坏了怎么办 平板电脑系统坏了怎么办 平板电脑充电器坏了怎么办 平板电脑触摸屏坏了怎么办 平板电脑关不了机怎么办 平板电脑触摸屏没反应怎么办 平板电脑声音太小怎么办 平板电脑频碎了怎么办? 淘宝直播展示频道排后怎么办 网店头像改不了怎么办 被骗了7500追不回来怎么办 steam中国版原来的游戏怎么办 老公买驾照被骗妻子应该怎么办 被淘密码骗了怎么办 逛街手机没电了怎么办 电脑登入密码忘了怎么办 晚上睡不好觉经常做梦怎么办 开淘宝店开始零销量怎么办 淘宝店开直通车后销量怎么办 淘宝直播一开始直播没人该怎么办 淘宝店铺访客数据下滑怎么办 2个ctrl键都失灵怎么办 淘宝上搜索不到很久以前订单怎么办 关键词找不到了是不是被降权怎么办 购买小程序关键词想退款怎么办? 浏览器审查元素不拆分关键词怎么办 拼多多商品想重新编辑怎么办