首页 > 试题广场 >

关于iOS中UIView的Auto Layout布局,以下说

[单选题]
关于iOS中UIView的Auto Layout布局,以下说法正确的是?
  • 当为UIView添加Auto Layout约束后,直接修改其frame属性会立即生效且持久
  • Auto Layout的约束会在layoutSubviews方法调用前计算并更新frame
  • 若同时设置了Auto Layout约束和frame,frame的设置会覆盖约束的效果
  • 使用Auto Layout时,必须将translatesAutoresizingMaskIntoConstraints属性设置为YES
Auto Layout 是 iOS 中用于动态计算视图位置和尺寸的布局系统,核心目标是让界面在不同设备、不同方向、不同尺寸下都能自适应显示,替代了传统的 frame 硬编码布局方式。
1. 约束:描述视图之间的位置 / 尺寸关系(比如 “按钮的顶部距离父视图顶部 20pt”、“标签的宽度和高度相等”)。
2. 参照系:约束必须基于两个对象(比如 A 视图和 B 视图,或视图和父视图),且需要明确「属性」(比如顶部、左边缘、宽度、高度)
3. 优先级:约束可以设置优先级(1~1000),优先级低的约束会在冲突时被忽略(1000 为最高优先级,必须满足)。
4.固有尺寸:部分视图(如 UILabel、UIButton)有 “固有内容尺寸”(由内容决定大小),Auto Layout 会优先使用这个尺寸(可通过 contentHuggingPriority/compressionResistancePriority 调整)。
修改frame不会持有生效,在系统再一次布局刷新的的时候,会重新计算frame
也不一定立即生效:如果在布局周期外修改,甚至可能完全看不到效果。
Auto Layout 的工作流程是:
设置约束 → 系统计算布局(updateConstraints)→ 应用布局(layoutSubviews)→ 渲染界面
你手动修改实际上是在渲染页面阶段,系统会在下一次布局刷新重新计算布局

Auto Layout的约束会在layoutSubviews方法调用前计算并更新frame
实际上会先从下向上计算frame,然后在从上向下进行布局,这也就是我们在
viewDidLayoutSubviews
后可以拿动frame的原因

translatesAutoresizingMaskIntoConstraints
  • 当值为 true(默认值):系统会自动把视图的 Autoresizing Mask 转换成等效的 Auto Layout 约束
  • 当值为 false:系统不会自动生成任何约束,所有约束必须由你手动添加。


发表于 2026-03-15 16:19:36 回复(0)