【问题标题】:How many ways can a UIView's dimensions be changed?UIView 的尺寸可以通过多少种方式改变?
【发布时间】:2012-11-30 14:03:20
【问题描述】:

我有一个 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 属性没有定义宽度或高度的灵活性。根据我的经验,边界/框架的高度没有被调整,但宽度被极度扭曲。

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

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

【问题讨论】:

    标签: uiview uikit subclass autoresizingmask


    【解决方案1】:

    在设备旋转期间,如果 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 像素矩形为边界的视图。严重变形。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-17
      相关资源
      最近更新 更多