如何使用超级视图自动调整子视图的大小?

时间:2011-03-29 13:47:43

标签: iphone

我有一个包含一个子视图的视图;这个子视图本身包含另一个子视图,它意味着比它的superview略小。

我正在创建第一个子视图全屏尺寸,然后将其缩小到屏幕上的非常小的尺寸。点击子视图后,我会将其从小尺寸设置为全屏幕。

问题是我的第二个子视图在此动画期间从不调整自身大小 - 它总是呈现为全尺寸并溢出其超视图的边界。

是否有一种简单的方法可以让子视图在超级视图改变大小时按比例保持自己的大小?

3 个答案:

答案 0 :(得分:30)

您可以通过编程方式添加自动调整行为

<强>目标C

subview.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

Swift 3.x

subview.autoresizingMask = [.flexibleWidth, .flexibleHeight]

Swift 2.x

subview.autoresizingMask = [.FlexibleWidth, .FlexibleHeight]

在Interface-Builder中,导航到选项卡3,然后单击中间的箭头; D

另一种解决方法可能是实现setFrame方法并始终使其适应superview的大小(而不是给定的frame.size)。不要忘记根据需要设置原点。

- (void) setFrame:(CGRect)frame
{
    CGRect rect = self.superview.frame;
    rect.origin.x = 0;
    rect.origin.y = 0;
    [super setFrame:rect];
}

答案 1 :(得分:8)

这对我来说很有把戏

subview.frame = subview.superview.bounds;

答案 2 :(得分:3)

如果您仅使用[.flexibleWidth,.flexibleHeight]作为自动调整遮罩,则子视图不会按比例调整大小。正确的答案是:

autoresizingMask = [.flexibleWidth, .flexibleHeight, .flexibleTopMargin, .flexibleLeftMargin, .flexibleBottomMargin, .flexibleRightMargin]