2013-08-27 2 views
0

У меня было представление с некоторыми текстовыми изображениями в нем, которые работали так, как я хотел. Расширение до одного и того же правого края, будь то пейзаж или портрет.iOS textviews не расширяется в scrollview в ландшафте

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

Вот несколько кодов.

- (void)viewDidLoad { 
    CGSize screen = [self handleScreenOrientation]; 
    [(UIScrollView *)self.view setContentSize:CGSizeMake(screen.width, screen.height)]; 
} 

- (CGSize)handleScreenOrientation { 
    UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation]; 
    CGRect screenRect = [[UIScreen mainScreen] bounds]; 

    if (orientation == UIDeviceOrientationPortrait || orientation == UIDeviceOrientationPortraitUpsideDown) { 
     return CGSizeMake(screenRect.size.width, screenRect.size.height); 
    } 
    else { 
     return CGSizeMake(screenRect.size.height, screenRect.size.width); 
    } 
} 

- (void) willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { 
    CGSize screen = [self handleScreenOrientation:toInterfaceOrientation]; 
    UIScrollView *scrollView = (UIScrollView *)self.view; 
    scrollView.frame = CGRectMake(0, 0, screen.width, screen.height); 
    scrollView.contentSize = CGSizeMake(scrollView.frame.size.width, scrollView.frame.size.height); 
    [scrollView setNeedsDisplay]; 
} 

Метод handleScreenOrientation с ориентацией прошел такой же, как тот, ш/без параметров, только он использует переданную ориентацию вместо текущей ориентации в строке состояния.

Я проверил, и мое scrollview настроено на авторазрешение подзонов.

Любые идеи были бы высоко оценены. Благодарю.

Update: Я добавил

self.view.autoresizesSubviews = true; 

for (UIView *view in self.view.subviews) { 
    view.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleWidth; 
} 

к viewdidload и willrotatetointerfaceorientation. Без изменений.

+0

Похоже, вам нужно установить autoresizingMasks. – Wienke

+0

Все мои ограничения и многое другое, что работало до того, когда супервизор был просто просмотром. Теперь он изменил поведение, поскольку это scrollview. – erosebe

+0

Вы, конечно, покрыли все базы на autoresizingMask своим добавленным кодом. Если посмотреть более внимательно, я думаю, что я вижу ответ, который я опубликую ниже ... – Wienke

ответ

0

Я думаю, проблема в том, что вы переопределяете autoresizingMasks, заставляя изменять содержимое contentSize scrollView. Хотя вы правильно отметили, что screenSize всегда находится в портретной ориентации, поэтому вы изменяете его размеры для пейзажа, вы определяете, какую ориентацию использовать до, устройство фактически вращается. Таким образом, вы вынуждаете scrollView сохранять размеры портрета в ландшафте.

Сохраните обычную процедуру autoresizeMask и отмените процедуру willRotateToInterfaceOrientation. Он работает сейчас?

Если нет, попробуйте поместить код willRotate в * done * RotateToInterfaceOrientation.


Еще одна идея:

Я заметил, что в viewDidLoad разыгрывании вид контейнера (self.view) в UIScrollView. Интересно, может ли лучше оставить контейнерный вид как общий UIView, добавить UIScrollView в качестве подзаголовка, а затем добавить текстовые просмотры в scrollview.

Возможно, я оказался в левом поле здесь, но я никогда не использовал прокрутку прямо на уровне контейнера, и мне интересно, может ли это быть проблемой.

+0

Хм ... Спасибо за предложение, но я не смог превратить его в что-то полезное. Я изменил willRotateToInterfaceOrientation на didRotateToInterfaceOrientation и переключился на no parameter версию handleScreenOrientation, но никаких изменений не произошло. Я также пробовал много сочетаний в том, чтобы уходить и что-то делать, но все они не имели никакого эффекта. – erosebe

+0

Я действительно думаю, что все, что вам нужно, это autoresizeMasks, без каких-либо рефрейминга. Одна вещь, которую вы можете сделать в качестве теста, - установить backgroundColor scrollView на что-то яркое (т. Е. [UIColor red]), чтобы вы могли видеть, что это scrollView или текстовые комментарии, которые отказываются настраивать. – Wienke

+0

Да. Я сделал это некоторое время назад. Если bg scrollview является красным, фон всего экрана всегда красный. Я предполагаю, что это означает, что он делает то, что я хочу, но у него нет родительского представления, поэтому я не был уверен, что не было какого-то поведения по умолчанию, о котором я не знал. – erosebe

Смежные вопросы