知识卡片

bounds 与 frame 是同一视图的两套坐标参照系

专业/工作 · 728.b

内容

同一个视图的位置和大小可以用两套不同参照系描述:frame 是这个视图在父视图坐标系里的位置和尺寸(”我在客厅的第几个格子里”),bounds 是这个视图在自己坐标系里的位置和尺寸,原点通常是自身的左上角(”我家门口往右10米”)。根视图因为没有更上层的父视图,两者数值相同;但普通子视图的 frame 会随它在父视图里摆放的位置变化,bounds 一般固定描述自身尺寸。这套区分不是 iOS 特有的,而是”绝对坐标 vs 相对坐标”这一通用几何建模思路在 UI 视图树里的体现:绝对位置依赖整棵父子层级才能算出来,相对位置只需要视图自己的尺寸信息,明确用哪套坐标系是做视图动画、手动布局时最容易踩坑的地方。

参考来源

《Swift全解析:新式iOS实战开发》第23章《中级》