Прежде всего, режим содержимого (устанавливается с помощью 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;
}];
}