问题描述:

最近使用给Flutter团队写view组件的时候,出现了触发Widget的频繁build的问题。

问题排查:

Flutter的同事提到在flutter层,是因为 updateViewportMetrics 这个函数的频繁触发调用。

在iOS代码中查到,主要是因为 viewDidLayoutSubviews 这个生命周期函数的频繁触发调用。

首先,知道viewDidLayoutSubviews的触发原理,其中有一条是有sub view的frame更改。

排查代码,代码中并没有频繁更改frame或者布局约束的操作。

但是,有label控件的显示是动态的,通过调试发现这个label的translatesAutoresizingMaskIntoConstraints属性设置为NO的时候,会触发这个问题。

问题解决:

设置如下,默认为Automatic, 修改为 Translates Mask Into Constraints. 即可解决这个问题,

问题解释:

关于translatesAutoresizingMaskIntoConstraints 原理不做解释。

当设置为Automatic时,即translatesAutoresizingMaskIntoConstraints = YES.  将使用自动布局,这个时候如果动态的更改label的文字显示,会触发布局,相当于会自动更改frame,进而会触发所在controller的viewWillLayoutSubviews和viewDidLayoutSubviews。

最新文章

  1. [转载]一个标准java程序员的进阶过程
  2. CentOS下Hadoop-2.2.0集群安装配置
  3. java系列-安装MySql(三)
  4. POJ1191 棋盘分割(DP)
  5. C++字符串(String)
  6. C++ 编程第二章小结
  7. android Services注意地方
  8. 关于VS 2010 RDLC 报表的详细使用说明
  9. python 之协程
  10. 饮冰三年-人工智能-Python-30 python开发中常见的错误
  11. 在用UEditor往后台传数据写入数据库时,出现错误:从客户端(NewsContent="<p><img src="http://...")中检测到有潜在危险的 Request.。。。
  12. struts配置result类型为json后导致页面不能访问的错误
  13. 20155323刘威良《网络对抗》Exp8 Web基础
  14. ecshop安装
  15. vue 知识点
  16. 2018.09.07 loj#10166 数字游戏(数位dp)
  17. src.rpm包的解压
  18. GUC-1 volatile
  19. SVNKit学习——使用低级别的API(ISVNEditor接口)直接操作Repository的目录和文件(五)
  20. kakfa 开发-01

热门文章

  1. leetcode-157周赛-5216-统计元音字母序列的数目
  2. 背包dp+打表处理——cf999F
  3. 最大流拆点——hdu2732,poj3436
  4. Java-Maven-pom.xml-project-repositories:repositories
  5. 一个上午,勉强记住了几种不同语言编译PE的启动函数
  6. linux 2.6 内核的移植
  7. Android开发 处理内存申请失败的报错(Failed to allocate a 38189038 byte allocation with 16777216 free bytes and 20MB until OOM)
  8. Stopwatch 计时器类
  9. 设置IDEA中properties文件显示中文
  10. 第七章 Odoo 12开发之记录集 - 使用模型数据