知识点回顾-bounds的深入认识

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

是什么导致的呢?

隐藏导航条,那么距离顶部偏移量变成20,因为还有状态栏的20.

这样做是为了防止全屏使用scrollview时候挡住控件的显示了,最明显就是tableview的cell了

但是有多个scrollview情况下,只会调整一个

结论:哪个控件先添加,那么就调整谁.

但是很多情况是用不到的.取消这种效果:

1.设置属性

self.automaticallyAdjustsScrollViewInsets = NO;

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

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

官方文档描述

总结:

frame和bounds的重新认识

  • frame

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

bounds和frame的区别

矩形框和内容的理解

  • 矩形框

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

时间: 2024-10-20 20:40:26

知识点回顾-bounds的深入认识的相关文章

Spring知识点回顾(01)

Spring知识点回顾(01) 一.依赖注入 1.声明Bean的注解 @Component @Service @Repository @Controller 2.注入Bean的注解 @Autowired @Inject @Resource 二.加载Bean 1.xml方式 - applicationcontext.xml : Beans, Bean, Component-Scan 2.注解方式 - @Configuration,@ComponentScan,@Bean 用@Configurati

面向对象【day07】:多态-面向对象使用场景--知识点回顾

本节内容 多态 面向对象使用场景 知识点回顾 一.多态 一.概述 多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作.简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针. 那么,多态的作用是什么呢?我们知道,封装可以隐藏实现细节,使得代码模块化:继承可以扩展已存在的代码模块(类):它们的目的都是为了--代码重用.而多态则是为了实现另一个目的--接口重用!多态的作用,就是为了

面试前的准备---C#知识点回顾----03

经过一天的奔波,喜忧参半,不细表 再回看下标题,C#知识点回顾 再看下内容,数据库3NF 原谅我这个标题党 今天继续回忆 1.HTTP中Post和Get区别 这忒简单了吧,大家是不是感觉到兴奋了,长舒一口气了,终于出现了一个可以聊上10分钟的问题了. 根据HTTP规范,Get用于信息获取,而且应该是安全的和幂等的. 参数在URL后,以?分割,以&相连. 根据HTTP规范,Post表示可能修改服务器的资源请求.数据存在HTTP包中 以上最基本的得知道吧,重点可以聊的出现了,安全性. 详细请拜读:h

PHP面向对象关键知识点回顾

一,类中的析构函数(__destruct): 析构函数是自动调用的 析构函数主要用于销毁资源 析构函数的调用顺序是先创建的对象最后被销毁(原理是栈的先进后出) 析构函数什么时候被调用 (1)当程序(进程结束)推出时 (2)当一个对象成为垃圾对象时候,该对象的析构方法也会被调用 (3)所谓垃圾对象,就是指没有任何变量再引用它(没有变量再只指向堆中的对象) (4)一旦对象成为垃圾对象,析构函数就会立即被调用 二,类中使用静态变量(static) 静态变量的引入是为了解决不同的对象实例能够共享同一个变

面向对象知识点回顾整理

目录 面向对象知识点回顾整理 一.面向对象基础 1.类和对象 2.属性查找: 3.绑定方法: 4.对象之间的交互: 5.类的内置属性 6.三大特性:继承.多态.封装 二.面向对象高阶 元类 单例模式 面向对象知识点回顾整理 一.面向对象基础 面向对象编程的核心是对象二字,对象是属性与方法的结合体,python中一切皆对象. 优点:可扩展性强 缺点:编程的复杂度高 1.类和对象 对象:属性和方法的结合体 类:一堆属性和方法的结合体 python中是先有类再有对象,现实生活中是先有对象再有类 类名(

Android群英传知识点回顾——第七章:Android动画机制与使用技巧

7.1 Android View动画框架 7.1.1 透明度动画 7.1.2 旋转动画 7.1.3 位移动画 7.1.4 缩放动画 7.1.5 动画集合 7.2 Android属性动画分析 7.2.1 ObjectAnimator 7.2.2 PropertyValuesHolder 7.2.3 ValueAnimator 7.2.4 动画事件的监听 7.2.5 AnimatorSet 7.2.6 在XML中使用属性动画 7.2.7 View的animate方法 7.3 Android布局动画

Android群英传知识点回顾——第六章:Android绘图机制与处理技巧

6.1 屏幕的尺寸信息 6.1.1 屏幕参数 6.1.2 系统屏幕密度 6.1.3 独立像素密度dp 6.1.4 单位转换 6.2 2D绘图基础 6.3 Android XML绘图 6.3.1 Bitmap 6.3.2 Shape 6.3.3 Layer 6.3.4 Selector 6.4 Android绘图技巧 6.4.1 Canvas 6.4.2 Layer图层 6.5 Android图像处理之色彩特效处理 6.5.1 色彩矩阵分析 6.5.2 Android颜色矩阵--ColorMatr

面试前的准备---C#知识点回顾----01

过完年来,准备找份新工作,虽然手里的工作不错,但树挪死,人挪活.咱不能一直在一个坑里生活一辈子,外面的世界毕竟是很美好的. 为了能正常的找到自己中意的工作,最近是将所有的基础知识拿出来复习了一次.仅作记录,自勉,各位大神不要喷,随意看看就好了. 以下知识点,均摘自面试过程中遇到的题 1.try{} 里面有个Return语句,那么紧跟try后面的Finally{}会不会执行? 答案:会执行,在Return后执行 喜欢研究透的同学可以参考:http://www.cnblogs.com/forcert

面试前的准备---C#知识点回顾----05

技术博客还得继续写,工作还在筛选,学习还得继续 1.Session和Cookie的使用区别 很容易回答的就是Session在服务器端,存储的数据可以较大容量,比如我们存一个Table,上千条数据. Cookie保存在客户端,安全系数低,不能放重要的敏感信息 以上回答完毕,你以为你回答完的时候,看向面试官的时候,发现他好像还在等待什么,这个时候如果你能继续描述他们的差别并且进行扩展,基本上你的水平又上了一个等级 关于这方面的信息,可以获取下这篇文章:http://www.cnblogs.com/y