Tips: ios中UIView的bounds中x/y出现负数的情况

3,122 阅读1分钟

简介

最近在工作中突然出现了UIView的bounds.y是负数的情况,所以总结一下UIView中有关于Bounds的内容。

Bounds

在iOS中Frame是相对于父视图的坐标系,Bounds是相对于自身的坐标系,通常Bounds可以被认为是origin{0, 0}frame。但是什么情况下bounds的origin不再是原点呢?

普通情况

工作中通常碰到origin不是原点,都是发生在带有透明度的导航栏/Tabbar下使用UIScrollView/UITableView/UICollectionView

这是因为系统会自动调整造成的,解决的方法也比较简单:

  1. 只需要在对应的UIViewController内调用self.automaticallyAdjustsScrollViewInsets = NO;
  2. scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;

重点

当然如果只是这么简单,就没必要记录下来。最近碰到的问题是这个View只是一个普通的UIView,并且superview中也没有任何异常,但偏偏这个view的bounds的y是负数,经过排查之后发现是因为在View初始化时传的frame.size.height是负数,所以就会造成bounds.origin.y也是负数,知道原因以后,解决起来就比较简单了,只需要确保传给view的frame.size不会出现负数的宽高即可。