Настройка представлений за пределами представления файла XIB, чтобы вписаться в представление прокрутки + Различные XIB для ориентации - IO - PullRequest
0 голосов
/ 19 июля 2011

У меня есть UIScrollView, который содержит контроллер представления, который содержит пару контроллеров - текстовые поля, кнопки, изображение и т. Д. Когда он отображается в портретном режиме, я хочу, чтобы он действовал так, как если бы не было прокручиваемого представления (оно все еще там, конечно, но отключено прокручивание и отскок и т. Д., Размер контента равен размеру фрейма приложения), а пользовательское представление просто отображается нормально, но при переключении в альбомную ориентацию я хочу сделать вид прокрутки доступным для использования, чтобы избежать жесткого пользовательского интерфейса.

Я хочу использовать специальный файл xib для портретного / альбомного режимов и не размещать объекты по-разному с помощью кода из-за локализации Я столкнулся с 3 проблемами при этом:

1) Я не могу найти способ загрузить и применить к контроллеру другой xib при вращении (я бы хотел, чтобы это был также плавный переход, но сейчас это не так важно)

2) Я не могу найти способ установить что-то кроме фреймов приложения в xib-файле (у меня нет кнопок и т. Д. Непосредственно в представлении с прокруткой, но внутри настраиваемого представления, которое находится внутри представления с прокруткой) , Поэтому я не могу поместить что-либо в невидимую часть вида прокрутки (часть, которую нужно прокрутить, чтобы ее можно было увидеть)

3) Я не могу найти способ указать размер содержимого представления прокрутки через файл xib, который необходим для того, чтобы интерфейс был максимально гибким для локализации.

Есть ли у вас какие-либо идеи о том, как реализовать / решить эти потребности?

Заранее спасибо!

1 Ответ

0 голосов
/ 21 июля 2011

Я бы посоветовал сделать первое, что вы сказали, что не сделаете:

Я хочу использовать определенный файл xib для портретного / альбомного режимов, а не Разместите объекты по-разному, используя код

Я потратил много времени, пытаясь использовать другой XIB для другой ориентации, но вот сделка:

1) Если у вас есть UITextField в книжной ориентации, то при повороте в альбомную ориентацию вы должны быть уверены, что текст в портретной ориентации, например, одинаковый в альбомной ориентации. Вы должны сделать это для каждого объекта.

2) Даже если вы не обращаете внимания на пункт 1) Я так и не смог успешно реализовать решение для двух xibs. Я не говорю, что вы не можете этого сделать, я просто говорю из своего опыта, что я не смог этого достичь.

Итак, если вы хотя бы подумаете о решении 1 xib, я мог бы объяснить немного:

-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)orientation{

}

-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{
    NSLog(@"My view will rotate");
    if (UIInterfaceOrientationIsPortrait(toInterfaceOrientation)) {
        [self viewsPositionPortrait];
    } else if (UIInterfaceOrientationIsLandscape(toInterfaceOrientation)){
        [self viewsPositionLandScape];
    }
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    NSLog(@"Register should rotate");
    return YES;
}

-(void)viewsPositionPortrait{

// Создать рамку для ваших "oneOfmyViews" для поворота портрета oneOfMyviews.frame = CGRectMake (..., ...., ..., ...); }

-(void)buttonsPositionLandScape{

// Создать рамку для ваших "oneOfmyViews" для поворота ландшафта oneOfMyviews.frame = CGRectMake (..., ...., ..., ...);

}

Затем вы можете в методах viewsPosition определить кадры вашего представления. Что ты выиграл?

1) Чистый код.

2) Красивые переходы.

3) Укажите размер содержимого представления прокрутки легко.

Для вас проблема с вращением ваших UIViews => CustomViewController => UIScrollView. Вы можете сделать что-то вроде этого:

1) Сделайте то же самое в вашем пользовательском представлении (методы выше) для ваших UIViews внутри вашего CustomViewController.

2) В представлении с пользовательскими контроллерами CustomView можно выполнять следующие действия:

-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{
    //(everything that i posted above)
    [myCustomViewController willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
}

Таким образом, вы будете вращать UIViews внутри вашего customViewController. Последний совет: отключите autoresize-subviews и уберите все авторазмеры из ваших UIViews (потому что вы будете определять их фрейм индивидуально).

...