0

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

BottomBox 具有以下覆盖方法:

-(void)setBounds:(CGRect)bounds;

-(void)setFrame:(CGRect)frame; 

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

BottomBox 对象具有 autoresizingMask 集:

bottombox1.autoresizingMask =
    UIViewAutoresizingFlexibleTopMargin |
    UIViewAutoresizingFlexibleLeftMargin |
    UIViewAutoresizingFlexibleRightMargin;

它们位于屏幕底部。

BottomBox 对象包含主 .layer 属性的子层,这些子层被转换,这些层的边界框超出了 BottomBox 对象的视图边界区域。这会导致框架/边界访问器返回调整后的边界值,我已经说明了这一点。

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

现在,我觉得我只是误解了边界和框架的真正含义。也许,实际上,它们是根据子视图和子层为每次访问动态计算的。

我想知道是否有其他方法可以调整这些,也许我忽略了一些东西。

4

1 回答 1

0

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

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

setFrame: 的接收者会正确接收根据 autoresizing mask 调整的帧。

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

我的具体实施说明:

例如,一个 432 像素正方形旋转 -120 度,有一个新的边界框 589。
然后当设备旋转并调用 setFrame 因为任何灵活的自动调整掩码常量时,setFrame 接收一个 589 像素正方形框架尺寸。旋转是静默应用的,另一个外部边界框由 803 像素正方形定义。

实际上,这个 803 的正方形实际上保持了 589 像素的高度,并没有垂直调整大小。这是因为自动调整大小的蒙版。在我的具体情况下,严格的下边距。

所以总而言之,一个最初是 432 像素正方形的视图设法变成了一个以 803x589 像素矩形为边界的视图。严重变形。

于 2012-12-13T22:06:15.937 回答