Автоматическое изменение размера подпредставлений: изменение размера происходит пропорционально, а не пропорционально - PullRequest
2 голосов
/ 17 февраля 2012

У меня странная проблема, которая, вероятно, имеет очень простое решение, я просто не вижу ее ...

У меня есть класс UIView, который содержит кнопку в качестве подпредставления, охватывающую 4/5ширины и одной трети высоты вида.Когда размер родительского вида изменяется (например, высота и половина ширины), кнопка должна оставаться там, где она есть (верхняя треть родительского вида), и теперь также имеет половину ширины и еще одну треть новой высоты.

Это означает:

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 Ответ

2 голосов
/ 17 февраля 2012

Это то, что вам нужно сделать:

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

Если вы устанавливаете гибкую высоту и ширину без установки гибких полей, то при изменении размера происходит то, что высота и ширина изменяются так, что поля (т.е.расстояние до границ суперпредставления) остается постоянным.

При установке гибкости высоты и нижнего поля верхний край остается прежним, а размер окна изменяется пропорционально суперпредставлению.То же самое касается ширины и правого поля.

...