1

我有 UIAlertView 并使用以下方法记录它的框架和边界:

  [self.alertView show];
  NSLog(@"frame: %@", NSStringFromCGRect(self.alertView.frame));
  NSLog(@"bounds: %@", NSStringFromCGRect(self.alertView.bounds));

我注意到框架和边界的宽度和高度是不同的。这怎么可能?

4

1 回答 1

2

UIView的frame、bounds、center、origin,什么时候用什么?

frame - 这是您最常用于普通 iPhone 应用程序的属性。大多数控件将相对于“包含”控件进行布局,因此frame.origin将直接对应于控件需要显示的位置,frame.size并将确定控件的大小。

bounds - 此属性不是定位属性,而是定义UIView“相对”到框架的可绘制区域。默认情况下,此属性通常为(0, 0, width, height)

话虽如此,bounds尺寸与尺寸不同并不奇怪也不罕见frame。因为在这种情况下,bounds矩形比它小,frame它仅仅意味着只有一部分view被绘制。

还要考虑UIAlertView视图层次结构,它比看起来要复杂得多,而且它在 iOS 7 中也发生了很大的变化。

为了进一步说明这一点,这是文档中的声明

该类UIAlertView旨在按原样使用,不支持子类化。此类的视图层次结构是私有的,不得修改。

这是一个很好的说法:这里是龙!

于 2013-11-02T21:57:32.360 回答