Ориентация интерфейса, растяжение и соотношение сторон - PullRequest
0 голосов
/ 08 февраля 2012
-  (BOOL)    shouldAutorotateToInterfaceOrientation 
          : (UIInterfaceOrientation)interfaceOrientation;

Вышеуказанный метод работает, как и ожидалось, с точки зрения обеспечения вращения. Но мне очень тяжело пытаться растянуть UIView, сохраняя его соотношение сторон.

Что происходит, так это то, что UIView растягивается по горизонтали при переходе в ландшафтный режим, но не будет растягиваться по вертикали, независимо от того, что я делаю. На самом деле его высота немного уменьшается в ландшафтном режиме.

Пробовал следующие настройки в IB и в коде, но безрезультатно.

  • В IB пробовали "Соотношение сторон", "Заполнение аспектами" и поле автоматического изменения размера
  • В коде пробовали "autosizingMask" и "setContentMode"

Надеюсь, кто-нибудь может помочь ...

Или, пожалуйста, оставьте записку, если вы сделали / столкнулись с чем-то похожим.

Редактировать:

Я думаю, что нашел решение по другому вопросу SO. Произошло то, что мой код запутался с эффектом функций автоматического изменения размера IB. Ссылку на вопрос можно найти в моем собственном ответе.

Ответы [ 2 ]

3 голосов
/ 08 февраля 2012

Прежде всего, режим содержимого (устанавливается с помощью setContentMode: или путем изменения режима просмотра в IB) не будет вам полезен, потому что он контролирует то, что происходит с содержимым представления в ответ изменение размера - оно не контролирует фактическое изменение размера.Более того, если вы не установите значение UIViewContentModeRedraw, содержимое не будет перерисовываться, а будет просто смещено или растянуто, что, как правило, не то, что вам нужно.

С другой стороны, установка маски автоматического изменения размера(или используя Autosizing Box в IB) также не дает вам того, что вы хотите.UIViewAutoresizingFlexibleWidth изменит ширину вида пропорционально изменению размера его суперпредставления (с помощью UIViewAutoresizingFlexibleLeftMargin и / или UIViewAutoresizingFlexibleLeftMargin дополнительно будет контролироваться, будет ли расстояние до сторон экрана оставаться постоянным).Но маска авторазмера не дает вам способа изменить высоту на основе изменения ширины: вы можете изменить ее пропорционально высоте суперпредставления и / или придерживаться верхней / нижней части.

Так что вам придется управлять изменением размера самостоятельно, программно, в willRotateToInterfaceOrientation:duration:.Что-то вроде:

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
    CGRect rectToResizeTo;

    if ((toInterfaceOrientation == UIInterfaceOrientationPortrait) || (toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown)) {
        rectToResizeTo = CGRectMake(x1, y1, width1, height1);
    } else {
        rectToResizeTo = CGRectMake(x2, y2, width2, height2);
    }
    [UIView animateWithDuration:duration animations:^{
        self.viewToResize.frame = rectToResizeTo;
    }];
}
0 голосов
/ 09 февраля 2012

Для тех, у кого похожая проблема, вы можете найти ваш ответ в этом другом вопросе SO: Размещение и определение размера подвидов в UIViewController .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...