MAKE BY - LJW -------转载请注明出处-------

前言:初学者对bounds的认识是以自己的左上角为坐标原点,而且x/y一般是0,0
但是对bounds深入认识之后,我们应该对它重新认识
以下是对bounds的一些认识:
bounds: x/y一般为(0,0)默认矩形框和内容是重叠的,所以默认是(0,0)
改变一个控件的bounds x/y对控件不会影响,对子控件有影响
修改父控件的bounds为(20,20)那么子控件会相对于父控件上移(20,20)
一个控件的认识:
起码是由两大块组成:
1.矩形框:控件的显示位置和尺寸
2.内容:控件内部的东西,比如它的子控件
bounds:以控件自己内容的左上角为坐标原点,计算出来的矩形框位置和尺寸
所以,bounds是包含位置和尺寸的.
frame:以父控件内容左上角为坐标原点,计算出来的矩形框位置和尺寸
控件本身的位置尺寸是由frame决定的,所以修改bounds,父控件的位置是不会变的
变得是内容的位置.而子控件的位置会随着内容的位置而改变
而此时,子控件发生了偏移,但是子控件的frame不会发生改变,因为子控件的frame是以父控件内容左上角为坐标原点得,内容偏移了(30,30),但是子控件跟随着也偏移了(30,30),相对于内容还是(0,0)
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {CGRect bounds = self.redView.bounds;bounds.origin = CGPointMake(30, 30);self.redView.bounds = bounds;NSLog(@"%@", NSStringFromCGRect(self.s.frame));
}

实际应用:
scrollview:往下拽,那么子控件的bounds的Y是负数,往上拽,内容往上走,Y值会越来越大
往左拽,内容往左边走,那么相对于内容左上角为原点,X就是正数,越来越大
此时,bounds的尺寸是不变的,还是矩形框的宽高
bounds对contentOffset的影响:
scrollview往上下左右拽,contentOffset也会发生变化,而且变化的值跟bounds是一样的,代表内容的偏移
scrollView.contentInset = UIEdgeInsetsMake(64, 0, 0, 0);

bounds对contentInset的影响:
设置内边距为64,那么内容x会使-64,因为内容往下偏移了.
所以修改内边距,可能会永久修改bounds的值,往下拽松手控件跟顶部永远会保留64的间距 

实际应用:
tableView的cell设置额外的偏移量
self.tableView.contentInset = UIEdgeInsetsMake(64, 0, 0, 0);

scrollview同样; 

验证:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{NSLog(@"%@", NSStringFromCGPoint(tableView.bounds.origin));
}

打印一下结果:

所以,bounds的origin跟contentOffset的值是一样的,而修改contentInset也会影响到这两者.

当一个控制器的scrollview套上一个导航控制器,那么scrollview里面的子控件会向下偏移64
就是说,处在导航控制器环境下,系统默认会自动调整距离顶部64的内边距, 那么bounds:-64  ,偏移量也是-64  
是什么导致的呢?
隐藏导航条,那么距离顶部偏移量变成20,因为还有状态栏的20.
这样做是为了防止全屏使用scrollview时候挡住控件的显示了,最明显就是tableview的cell了
但是有多个scrollview情况下,只会调整一个
结论:哪个控件先添加,那么就调整谁.
但是很多情况是用不到的(一般用在tableview cell 比较常见).取消这种效果:
1.设置属性
self.automaticallyAdjustsScrollViewInsets = NO;

2.设置相应的偏移量抵消

self.scrollView.contentInset = UIEdgeInsetsMake(-64, 0, 0, 0);

官方文档描述

TabBarController对contentInset的影响:

如果scrollview被套上NavigationController和TabBarController,滚动到最上面,系统会自动下移64,滚到最下面,增加49.保证里面内容都能看到

iOS7之后,苹果做出了这样的效果,并且是可以穿透的. 但是只有TabBarController就不会有自动调整

打印结果:

总结:

frame和bounds的重新认识

  • frame

    • 父控件 内容的左上角为坐标原点, 计算出的控件自己 矩形框的位置和尺寸
  • bounds
    • 控件自己 内容的左上角为坐标原点, 计算出的控件自己 矩形框的位置和尺寸
  • 概括
    • frame.size == bounds.size
    • scrollView.bounds.origin == scrollView.contentOffset
bounds和frame的区别

矩形框和内容的理解

  • 矩形框

    • 控件自己的显示位置和尺寸
  • 内容
    • 控件内部的东西,比如它的子控件

---恢复内容结束---

转载于:https://www.cnblogs.com/ljwiOS/p/5499227.html

技术分享-bounds的深入认识相关推荐

  1. Apollo决策技术分享

    本文是根据Apollo开发者社区在3月26日举办的"Apollo决策技术分享"在线图文直播课程的授课内容整理而得. 一,决策的目的 决策模块相当于无人驾驶系统的大脑,保障无人车的行 ...

  2. Inplayable技术分享

    Inplayable技术分享 运维 设计模式 Web 安全 工具 语言 python 运维 <aws lambda 通过codebuild上线踩坑指南之 lambda 进程被占用 status ...

  3. iOS-FXDanmaku弹幕库介绍、相关技术分享

    前言 去年, 2016年, 一大波直播平台在移动端涌出, 直播慢慢步入了人们的视角. 网上如今能够看到各式各样的直播, 如秀场直播.游戏直播.体育直播.娱乐直播等等. 在各种类型的直播中, 弹幕在PC ...

  4. UI培训技术分享:设计大神都在用的10种技法!

    越来越多的人开始学习UI设计,想要进群到UI设计这个行业,本期小编为大家介绍的UI培训教程就是关于设计师会经常用到的一些技巧,帮助大家后期的工作中的应用. UI培训技术分享:设计大神都在用的10种技法 ...

  5. UI设计培训技术分享:搞定萌萌哒可爱图标

    UI设计要学到的东西有很多,那么关于图标设计就是其中的一种,很多企业比较忠于萌萌哒的可爱图标,那么如何搞定萌萌哒可爱图标呢?来看看下面UI设计培训技术分享教程. UI设计培训技术分享:搞定萌萌哒可爱图 ...

  6. 好程序员web前端技术分享媒体查询

    为什么80%的码农都做不了架构师?>>>    好程序员web前端技术分享媒体查询 什么是媒体查询 媒体查询可以让我们根据设备显示器的特性(如视口宽度.屏幕比例.设备方向:横向或纵向 ...

  7. 龙芯架构应用迁移技术分享——搜狗输入法应用迁移

    技术引领创新,用"芯"构建生态,第一期龙芯生态论坛将于2021年3月12日(周五)盛大开讲!龙芯生态论坛作为龙芯生态建设的重要技术交流窗口,将汇聚龙芯资深技术专家及行业生态伙伴精英 ...

  8. freescale imx6 编译 linux ltib,TQIMX6Q技术分享——LTIB安装配置(转)

    TQIMX6Q_BASEC开发板是天嵌科技在2015年重磅推出的顶级开发平台,采用飞思卡尔的I.MX6Q芯片,真四核运行,1G Hz主频,2G DDR3内存,8G EMMC FALSH.TQIMX6Q ...

  9. 一个研发团队是如何坚持7年技术分享的?

    --"所有分享都是有意义的" --"在PingCode,人人都可以成为分享者" 这是PingCode研发团队的分享精神,而这样的精神,在过去7年中已经闪耀了10 ...

最新文章

  1. fragment中listview触发事件setOnItemClickListener不好使
  2. jupyter修改密码后无法启动服务器,搭建jupyter远程连接服务器
  3. Linux中将pip 源切换至国内镜像~亲测可用
  4. MySQL Execution Plan--执行计划中的Type列
  5. SQL Server 2012笔记分享-6:理解内存管理
  6. mysql清理 frm_通过.frm .ibd文件恢复MySQL数据
  7. go hive skynet_云风的skynet在国内外来看究竟算什么水平?可以一统国内游戏服务端框架吗?...
  8. GMF 教程 Mindmap 5
  9. Ranger-AdminServer安装(开启Kerberos)
  10. vue element-ui只有一条信息时默认选中按钮,且不能取消,多条信息时可以手动选择
  11. docker nginx 反向代理
  12. 计算机信息管理系统实训摘要,计算机实训报告摘要.doc
  13. Python 根据图片url,批量下载图片
  14. python 大智慧自定义数据_大智慧扩展数据、自定义数据
  15. 图像处理算法 之 Hough变换
  16. 程序员的算法趣题 python3 - (4)
  17. 数据科学 IPython 笔记本 一、TensorFlow
  18. 万用表测试软件,最全的万用表使用方法看这里!
  19. 蛋白质互作工具开发笔记(一)——整体计划实施
  20. Navicat连接Mysql方法教程

热门文章

  1. emacs org mode 中的标签全参考
  2. 赴美工作常识(Part 4 - 面试)
  3. 浅析jQuery的链式调用 之 each函数
  4. 职业生涯中的八大“定位法则”(转)
  5. java.lang.IllegalAccessError: org.apache.commons.dbcp.DelegatingPreparedStatement.isClosed()Z
  6. 浅玩JavaScript的数据类型判断
  7. 阿里云 yum无法正常使用的解决办法 (转)
  8. T-SQL查询进阶--深入理解子查询
  9. live的domain服务
  10. Cloudera Manager 5 和 CDH5 本地(离线)安装指南(Hadoop集群搭建)