自动调整子视图:调整大小似乎是绝对的而不是成比例的

时间:2012-02-17 13:45:17

标签: iphone uiview autoresize

我有一个奇怪的问题,可能有一个非常简单的解决方案,我只是看不到它......

我有一个UIView类,它包含一个按钮作为子视图,跨越宽度的4/5和视图高度的三分之一。调整父视图的大小(例如,具有高度和宽度的一半)时,按钮应保持原位(父视图的前三分之一),现在也有一半的宽度,仍然是新高度的三分之一。 / p>

这意味着:

Parent before: Frame (0,0,100,100)
Button before: Frame (0,0,80,33.3)

Parent after: Frame (0,0,50,50)
Button after: Frame (0,0,40,16.7)

问题是,按钮总是有框架(0,0,30,0)。似乎按钮的新宽度和高度我只是通过减去50像素的变化来实现,而不是按比例调整大小。必须是非常愚蠢的东西,但我找不到它。

以下是我的UIView类的代码:

-(id)init
{
    self = [super init];
    if(self)
    {
        self.autoresizesSubviews = true;

        self.frame = CGRectMake(0,0,100,100);
        button = [UIButton buttonWithType:UIButtonTypeCustom];
        button.frame = CGRectMake(0,0,80, self.frame.size.height / 3);
        button.autoresizingMask = UIViewAutoresizingFlexibleHeight
                                  |UIViewAutoresizingFlexibleWidth;

        [self addSubview:button];
    }

    return self;
}

有人有想法吗?我已经在autoresizeMask标志上尝试了很多变化,但没有用 - 而且上面的标志也应该是正确的......

1 个答案:

答案 0 :(得分:2)

这是你需要做的:

button.autoresizingMask = UIViewAutoresizingFlexibleHeight |
                          UIViewAutoresizingFlexibleWidth |
                          UIViewAutoresizingFlexibleRightMargin |
                          UIViewAutoresizingFlexibleBottomMargin;

如果设置灵活的高度和宽度而不设置灵活的边距,则调整大小时会发生的变化是高度和宽度发生变化,以便边距(即到超视图边界的距离)保持不变。

将高度和底部边距设置为灵活使顶部边距保持不变,并且视图将与超视图成比例地调整大小。宽度和右边距也一样。