我有 UIAlertView 并使用以下方法记录它的框架和边界:
[self.alertView show];
NSLog(@"frame: %@", NSStringFromCGRect(self.alertView.frame));
NSLog(@"bounds: %@", NSStringFromCGRect(self.alertView.bounds));
我注意到框架和边界的宽度和高度是不同的。这怎么可能?
我有 UIAlertView 并使用以下方法记录它的框架和边界:
[self.alertView show];
NSLog(@"frame: %@", NSStringFromCGRect(self.alertView.frame));
NSLog(@"bounds: %@", NSStringFromCGRect(self.alertView.bounds));
我注意到框架和边界的宽度和高度是不同的。这怎么可能?
从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
旨在按原样使用,不支持子类化。此类的视图层次结构是私有的,不得修改。
这是一个很好的说法:这里是龙!