这篇是见过写的最为详细易懂的文章:

frame与bounds的区别详解 - 简书

简单概括下:

1.bounds和frame都是属于CGRect类型的结构体,系统的定义如下,包含一个CGPoint(起点)和一个CGSize(尺寸)子结构体。

struct CGRect {CGPoint origin;CGSize size;
};
复制代码

2.frame 是子视图相对于父视图的位置origin和大小,其坐标系是参照父视图的坐标系

3.bounds是子视图本身的位置origin和大小,坐标系是参照本身坐标系,即 更改bounds中的位置对于当前视图没有影响,相当于更改了当前视图的坐标系,对于子视图来说当前视图的左上角已经不再是(0,0), 而是改变后的坐标,坐标系改了,那么所有子视图的位置也会跟着改变。

  • frame不管对于位置还是大小,改变的都是自己本身。
  • frame的位置是以父视图的坐标系为参照,从而确定当前视图在父视图中的位置。
  • frame的大小改变时,当前视图的左上角位置不会发生改变,只是大小发生改变。
  • bounds改变位置时,改变的是子视图的位置,自身没有影响;其实就是改变了本身的坐标系原点,默认本身坐标系的原点是左上角。
  • bounds的大小改变时,当前视图的中心点不会发生改变,当前视图的大小发生改变,看起来效果就想缩放一样

以下是学习完后自制的简陋 scrollview

//
//  ViewController.swift
//  自制scrollview
//
//  Created by Mengduan on 2023/5/6.
//import UIKit
let screenwidth = UIScreen.main.bounds.size.width
let screenhight = UIScreen.main.bounds.size.height
class ViewController: UIViewController {lazy var ScreollView : UIView = {let scrview = UIView(frame: CGRect(x: screenwidth/2-50, y: 70, width: 100, height: 600))scrview.bounds.origin = CGPoint(x: 0, y: 0)scrview.backgroundColor = .redreturn scrview}()lazy var upButton : UIButton = {let button = UIButton(frame: CGRect(x: 20, y: 800, width: 50, height: 50))button.setTitle("up", for: .normal)button.backgroundColor = .greenbutton.addTarget(self, action: #selector(upup), for: .touchUpInside)return button}()lazy var downButton : UIButton = {let button = UIButton(frame: CGRect(x: 260+40, y: 800, width: 50, height: 50))button.setTitle("down", for: .normal)button.backgroundColor = .greenbutton.addTarget(self, action: #selector(downdown), for: .touchUpInside)return button}()override func viewDidLoad() {super.viewDidLoad()// Do any additional setup after loading the view.configUI()}func configUI(){self.view.addSubview(ScreollView)self.view.addSubview(upButton)self.view.addSubview(downButton)}@objc func upup(){ScreollView.frame.origin.y = ScreollView.frame.origin.y - 10}@objc func downdown(){ScreollView.frame.origin.y = ScreollView.frame.origin.y + 10}}

用以加深对bounds和frame的理解

部分图文来源https://www.jianshu.com/p/7e3ed50b39a1

frame 和 bounds的区别相关推荐

  1. 【转】frame与bounds的区别比较

    翻译文档上的bounds是指这个view在它自己坐标系的坐标和大小 而frame指的是这个view在它superview的坐标系的坐标和大小区别主要在坐标系这一块.很明显一个是自己为原点的坐标系,一个 ...

  2. frame与bounds的区别比较

    翻译文档上的
bounds是指这个view在它自己坐标系的坐标和大小 而frame指的是这个view在它superview的坐标系的坐标和大小
区别主要在坐标系这一块.

很明显一个是自己为原点的坐标 ...

  3. 完结之frame和bounds的区别

    回顾上集,我写了frame和bounds在x.y上的区别,以及简单的描述frame的width和height.这次,继续前集但又不同于前集.继续前集,我是想把bounds的width和height讲完 ...

  4. iOS bug 日志 -frame 和 bounds的区别

    使用显式动画,如果设置layer 的bounds和frame效果是不一样的 如果设置 self.layer.bounds = CGRectMake(0, 0, width, width); 效果如图 ...

  5. frame 和bounds 的区别

    二者都是方的. bounds 对内 不包含自身 相对 superView的 位置 frame 对外 包括自身相对 superView的坐标 self.bounds= CGRectMake(0,0,se ...

  6. frame、bounds表示大小和位置的属性以及center、position、anchorPosition

    在iOS开发开发过程中经常会用到界面元素的frame.bounds表示大小和位置的属性以及center.position.anchorPosition等单纯表示位置的属性.这些属性究竟什么含义?彼此间 ...

  7. ios开发之UIView的frame、bounds跟center属性的区别(附图)

    博文暂时想到什么写什么,不顺理成章,不顺章成篇. 先看几个概念 坐标点Poit:向右侧为X轴正方向的值x,原点下侧为Y轴正方向的值y 大小Size:由宽度width和高度height构成,表示一个矩形 ...

  8. iOS中frame和Bounds之间的区别

    frame frame是每个view必备的属性,代表的是当前视图的位置和大小,没有设置他,当前视图是看不到的.位置需要有参照物才能确定,数学中我们用坐标系来确定坐标系中的某个点的位置,iOS中有他特有 ...

  9. iOS开发-View中frame和bounds区别

    开发中调整View的时候的经常会遇到frame和bounds,刚开始看的时候不是很清楚,不过看了一下官方文档,frame是确定视图在父视图中的位置,和本身的大小,bounds确定可以确定子视图在当前视 ...

最新文章

  1. randn--创建正态分布随机矩阵
  2. 10 大常用软件架构模式简介
  3. RocketMQ集成SpringBoot
  4. 学成在线--15.课程计划查询
  5. LeetCode 312. 戳气球(DP,难)
  6. 硬件时间,操作系统时间,Windows 和linux 双系统时间差8小时问题说明
  7. mysql常用基础操作语法(九)~~外连接查询【命令行模式】
  8. c语言编写的程序不具备移植性,《C语言》试卷1
  9. 力软下拉框多选_力软快速开发平台:方便快捷的Web开发平台
  10. 以太网转串口代码C语言,基于STM32 串口转以太网收发数据(stm32移植代码+网络调试助手等)...
  11. [矩阵论] 上三角阵的逆(如果有)则也是上三角阵
  12. 多层次细节(Level of detail)
  13. 争议带货达人董明珠:直播带货476亿 却被质疑经销商刷单
  14. RN 启动开发服务器时报错 ReferenceError: SHA-1 for file
  15. 【Oracle】存储过程 遍历树 举例emp表的树状结构
  16. 曹云金回应公式相声_疑砸挂曹云金?阎鹤祥封箱大典开玩笑要退社,郭德纲回复亮了!...
  17. JavaScript葵花宝典(基础)
  18. 【软件测试】300个不得不懂的理论知识(上)
  19. Kubernetes web界面kubernetes-dashboard安装
  20. 艾永亮:盘点产品创新的三种颠覆方式

热门文章

  1. 64位系统上使用PLSQL Developer的解决方案
  2. ERP是什么?能做什么?
  3. 面向对象的3 大特性封装、继承、多态。咱们今天用代码的形式来解释一下这名声赫赫的3大特性。...
  4. 老板、方太、美的们决战洗碗机“中国化”的新拐点
  5. java 左边补0_java补充0 java数字左侧补零补0 NumberFormat实现数字左侧补0
  6. CodeQL基础语法
  7. 爬虫之Selenium模块
  8. 基于Html+Css+javascript的游戏网页制作红色主题(我和我的祖国10页)
  9. 机器人将“上岗”参与“中国天眼”运维
  10. 计算机的基础组成部分