Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 自动调整子视图的大小:调整大小似乎是绝对的,而不是比例的_Iphone_Uiview_Autoresize - Fatal编程技术网

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

Iphone 自动调整子视图的大小:调整大小似乎是绝对的,而不是比例的,iphone,uiview,autoresize,Iphone,Uiview,Autoresize,我有一个奇怪的问题,可能有一个非常简单的解决方案,我就是看不出来 我有一个UIView类,它包含一个按钮作为子视图,跨越视图宽度的五分之四和高度的三分之一。调整父视图的大小时(例如,具有高度和宽度的一半),按钮应保持在原来的位置(父视图的上三分之一),现在也具有宽度的一半和新高度的三分之一 这意味着: Parent before: Frame (0,0,100,100) Button before: Frame (0,0,80,33.3) Parent after: Frame (0,0,50

我有一个奇怪的问题,可能有一个非常简单的解决方案,我就是看不出来

我有一个UIView类,它包含一个按钮作为子视图,跨越视图宽度的五分之四和高度的三分之一。调整父视图的大小时(例如,具有高度和宽度的一半),按钮应保持在原来的位置(父视图的上三分之一),现在也具有宽度的一半和新高度的三分之一

这意味着:

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标志上尝试了很多变化,但是没有用-上面的标志也应该是正确的…

这就是您需要做的:

button.autoresizingMask = UIViewAutoresizingFlexibleHeight |
                          UIViewAutoresizingFlexibleWidth |
                          UIViewAutoresizingFlexibleRightMargin |
                          UIViewAutoresizingFlexibleBottomMargin;
如果在不设置灵活边距的情况下设置灵活的高度和宽度,则调整大小时会发生的情况是高度和宽度会发生变化,以便边距(即到superview边界的距离)保持不变


将“高度”和“底部边距”设置为“灵活”将使顶部边距保持不变,并且视图将根据superview按比例调整大小。宽度和右边距也是一样。

我自己刚刚找到了它,在与IB进行了比较并与代码中的设置进行了比较之后。。。这两者之间的矛盾令人难以置信-在IB中,它足以主动设置两条内部红线,并将外部线保留为灰色,但在autoresizingMask中,您必须添加所有标志-对于我想做的事情,即使是左边缘和上边缘的标志。。。但无论如何还是要感谢:-)它实际上是相当一致的:框中的弹簧相当于
uiviewautoresizingflexiblewhight
UIViewAutoresizingFlexibleWidth
,激活顶部结构相当于关闭
uiviewautoresizingflexibletpmargin
(其他三个页边距也是如此).如果您知道,则保持一致:-)