简介
最近在工作中突然出现了UIView的bounds.y是负数的情况,所以总结一下UIView中有关于Bounds的内容。
Bounds
在iOS中Frame是相对于父视图的坐标系,Bounds是相对于自身的坐标系,通常Bounds可以被认为是origin是{0, 0}的frame。但是什么情况下bounds的origin不再是原点呢?
普通情况
工作中通常碰到origin不是原点,都是发生在带有透明度的导航栏/Tabbar下使用UIScrollView/UITableView/UICollectionView。
这是因为系统会自动调整造成的,解决的方法也比较简单:
- 只需要在对应的UIViewController内调用
self.automaticallyAdjustsScrollViewInsets = NO; scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
重点
当然如果只是这么简单,就没必要记录下来。最近碰到的问题是这个View只是一个普通的UIView,并且superview中也没有任何异常,但偏偏这个view的bounds的y是负数,经过排查之后发现是因为在View初始化时传的frame.size.height是负数,所以就会造成bounds.origin.y也是负数,知道原因以后,解决起来就比较简单了,只需要确保传给view的frame.size不会出现负数的宽高即可。