UIView的尺寸可以改变多少种方式?

时间:2012-12-12 19:19:50

标签: uiview uikit subclass autoresizingmask

我有一个UIView的自定义子类,我们称之为BottomBox。

BottomBox具有覆盖方法:

-(void)setBounds:(CGRect)bounds;

-(void)setFrame:(CGRect)frame; 

在每个中调用[super set *:*],并在两者中记录当前和新的CGRects以及断点。

BottomBox对象具有autoresizingMask设置:

bottombox1.autoresizingMask =
    UIViewAutoresizingFlexibleTopMargin |
    UIViewAutoresizingFlexibleLeftMargin |
    UIViewAutoresizingFlexibleRightMargin;

它们位于屏幕的底部。

BottomBox对象包含主.layer属性的子图层,并且这些子图层被转换,这些图层的边界框位于BottomBox对象视图边界的区域之外。这会导致帧/边界访问器返回调整后的边界值,我已经考虑过了。

但是在更改设备方向后,尽管autoresizingMask属性定义了宽度或高度没有灵活性,但BottomBox对象的异常调整大小。根据我的经验,边界/框架的高度没有调整,但宽度非常扭曲。

现在,我觉得我只是误解了界限和帧的真正含义。也许,实际上,它们是基于子视图和子图层为每次访问而动态计算的。

我想知道是否有其他方法可以调整,也许我忽视了一些事情。

1 个答案:

答案 0 :(得分:0)

在设备轮换期间,任何允许重新定向和查看大小调整的UIViewController都会影响任何子视图,如果它的view.autoresizesSubviews为YES。

然后任何具有灵活大小调整掩码的子视图都允许从[UIView(Geometry)_applyAutoresizingMaskWithOldSuperviewSize:]中调用setFrame。

setFrame的接收器:将正确接收根据自动调整掩码调整的帧。

在我的BottomBox中,有一个setFrame覆盖,用于检查frame参数,以及调用[super setFrame:frame]后的帧值。

我的具体实施说明:

例如,一个432像素的方形旋转-120度,有一个新的边界 589的方框 然后,当旋转设备并且由于任何灵活的自动调整掩码常量而调用setFrame时,setFrame接收589像素的方形帧大小。 静默应用旋转,另一个外边界框由803像素的方块定义。

实际上,这个803平方实际上保持了589像素的高度,它没有垂直调整大小。这是因为自动调整大小的掩码。在我的特定背景下的刚性底部边缘。

总而言之,最初为432像素的视图设法成为由803x589像素矩形限定的视图。严重扭曲。