我有一个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对象的异常调整大小。根据我的经验,边界/框架的高度没有调整,但宽度非常扭曲。
现在,我觉得我只是误解了界限和帧的真正含义。也许,实际上,它们是基于子视图和子图层为每次访问而动态计算的。
我想知道是否有其他方法可以调整,也许我忽视了一些事情。
答案 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像素矩形限定的视图。严重扭曲。