#iOS问题记录# 频繁触发viewDidLayoutSubviews的问题
2024-09-08 13:59:20
问题描述:
最近使用给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。
最新文章
- [转载]一个标准java程序员的进阶过程
- CentOS下Hadoop-2.2.0集群安装配置
- java系列-安装MySql(三)
- POJ1191 棋盘分割(DP)
- C++字符串(String)
- C++ 编程第二章小结
- android Services注意地方
- 关于VS 2010 RDLC 报表的详细使用说明
- python 之协程
- 饮冰三年-人工智能-Python-30 python开发中常见的错误
- 在用UEditor往后台传数据写入数据库时,出现错误:从客户端(NewsContent=";<;p>;<;img src=";http://...";)中检测到有潜在危险的 Request.。。。
- struts配置result类型为json后导致页面不能访问的错误
- 20155323刘威良《网络对抗》Exp8 Web基础
- ecshop安装
- vue 知识点
- 2018.09.07 loj#10166 数字游戏(数位dp)
- src.rpm包的解压
- GUC-1 volatile
- SVNKit学习——使用低级别的API(ISVNEditor接口)直接操作Repository的目录和文件(五)
- kakfa 开发-01
热门文章
- leetcode-157周赛-5216-统计元音字母序列的数目
- 背包dp+打表处理——cf999F
- 最大流拆点——hdu2732,poj3436
- Java-Maven-pom.xml-project-repositories:repositories
- 一个上午,勉强记住了几种不同语言编译PE的启动函数
- linux 2.6 内核的移植
- Android开发 处理内存申请失败的报错(Failed to allocate a 38189038 byte allocation with 16777216 free bytes and 20MB until OOM)
- Stopwatch 计时器类
- 设置IDEA中properties文件显示中文
- 第七章 Odoo 12开发之记录集 - 使用模型数据