这个View的属性默认为true. 当我们要用constraints时需要设置为false.
- 当在storyboard中开始为View设置constraints时, 会自动设置为false.
- 当我们在代码中给view设置约束之前, 需要自己显式地把这个属性设置为false.
- sizeToFit(): 刚好包裹内容的大小.
LinearLayout
.)往Stack View里加需要叠放的元素用的是
addArrangedSubview()
这个方法.与此同时,
addSubview()
方法可以用来加一些别的View.几个属性:
- axis: 主轴方向.
- alignment: 对齐方式.
- distribution: 沿着主轴的分布.
Layout Guide很多时候为了布局的需要我们可能要包裹View或者是添加一下辅助View, 每个View都有自己的layer, 所以为了改进性能, 我们可以使用Layout Guide.
View自带一个layoutMarginsGuide.
还挺方便的. (看了这个视频: https://www.youtube.com/watch?v=4qPcMGiSADA)
Performance & Building Efficient LayoutsiOS12对AutoLayout的性能做了很多改进, 这个WWDC的talk有讲.
关于有效率的布局, 简而言之就是少做无用功.
Constraint Churn
constraint churning
是个典型的性能问题.churn
: 搅动.constraint churn是指更新了constraints, 但实际上view并不需要移动.
这样是给engine发送了额外的信息, 达到一定数量之后, 就会影响性能.
需要注意的是:
- 不要remove all constraints然后又add all. 可以把它们分组, 哪些是固定不变的, 那么addView的时候就加上, 然后activate; 对于需要动态变化的部分可以分两组(比如一个根据内容动态决定是否需要显示图片的例子, 可以有两个数组: imageConstraints和noImageConstraints), 单独activate/deactivate这两组约束.
- 使用isHidden可以提高效率. 比起add/remove Subview来说.
- Avoid removing all constraints
- Add static constraints once
- Only change the constraints that need changing
- Hide views instead of removing them
- Return size if known without text measurement
- Use
UIView.noIntrinsicMetric
and constraints.
而这个system layout size fitting size, 是从engine取出来的.
但是它有想不到的性能消耗. (every time you call the method, an engine is created and discarded.)
DebuggingAuto Layout中由约束引起的错误可能会有:
- 约束自相矛盾(冲突), 不能满足, 无解. (比如一个宽度即等于100又等于200, ???)
- 约束不足导致有很多可能的解. (Engine会给出一个解, 但可能不是你想要的.)
大体上是根据Log还有一些可能有帮助的view的属性和方法(供debug用).
这个视频(https://developer.apple.com/videos/play/wwdc2015/219/)的后半段有讲debug.
这里还有一个小工具网站: https://www.wtfautolayout.com/
SummaryAuto Layout是线性代数的应用实例.
有时候搬砖搬久了是不是应该慢下来欣赏一下数学的美.
经验总结扩展阅读
- 2023年9月17日开学典礼黄道吉日 2023年9月17日开学典礼好吗
- 2023年农历八月初三宜开学吗 2023年9月17日开学行吗
- 2023年9月17日适合拜师学艺吗 2023年农历八月初三宜拜师学艺吗
- 2023年9月17日上学吉日一览表 2023年9月17日是上学吉日吗
- 2023年1月29日拜师学艺黄道吉日 2023年农历正月初八宜拜师学艺吗
- 2023年1月29日上学黄道吉日 2023年1月29日上学好不好
- 2023年1月29日是开学典礼吉日吗 2023年1月29日适合开学典礼吗
- 2023年1月29日适合开学吗 2023年1月29日开学好吗
- 2023年1月29日入学行吗 2023年农历正月初八宜入学吗
- 我是学生能送我吗是什么梗