Портретная раскладка XCode Redraw с двойной строкой состояния - PullRequest
2 голосов
/ 27 мая 2011

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

-(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration

метод с оператором if и else, «if» использует CGRectMakes для рисования всех элементов, куда они должны идти в альбомной ориентации, а «else» перерисовывает их обратно на свои исходные места, когда они возвращаются в портретный ландшафт. Это все работает очень хорошо. Я вспомнил, что мы должны были справиться с двойной строкой состояния, поэтому я смоделировал ее, чтобы посмотреть, что она сделает с моим приложением. Когда я нахожусь на главном экране и включаю и выключаю его, автоматическое изменение размеров элементов (которые настроены для регулировки в соответствии с верхней частью представления) работает хорошо, слегка сжимая все вниз и не скрывая ничего. Я могу выключить его и включить без проблем.

Теперь вот проблема:

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

Точно так же у меня есть карта между навигацией и панелью вкладок на другой странице. Когда вы уже находитесь на странице и включаете и выключаете ее, все отлично изменяется (рамка карты меняет высоту, а панель навигации перемещается вниз). Но опять же, у меня проблема при переключении на этот экран с другого экрана или из альбомной ориентации, потому что вместо правильного автоматического изменения размера, вид карты и панель навигации частично опускаются за панель вкладок, скрывая товарный знак Google, который является основанием для отклонения приложения.

Извините за длинную голову, но я хотел четко описать, какие обстоятельства вызывают эту проблему. Буду признателен за любые идеи, так как я не знаю, как к этому подойти.

1 Ответ

0 голосов
/ 09 октября 2011

Я пытался отследить эту проблему сам. Я думаю, что это происходит потому, что маска автоматического изменения размера используется только при изменении размеров видов, а не при добавлении нового вида в сцену.

Для меня я хотел, чтобы представление настроек было загружено из пера и добавлено поверх всего остального. Если бы при добавлении вида действовала панель двойной высоты, она бы исчезла из нижней части экрана. Чтобы исправить это, вы должны сами установить размер и положение вида при загрузке. Вот код моей рабочей кнопки «Перейти к настройкам»:

- (IBAction) settingsPressed:(id)_sender
{
    NSArray* a = [[NSBundle mainBundle] loadNibNamed:@"SettingsView" owner:self options:nil];
    SettingsView* settings = [a objectAtIndex:0];
    settings.frame = self.view.bounds;
    [[self view] addSubview:settings];
}

Важная строка:

settings.frame = self.view.bounds;

Что, по-видимому, классифицируется как «изменение размера», и поэтому применяются правила маски изменения размера. Позже я добавил анимацию для перехода, и она продолжает работать просто отлично.

Примечание. Этот метод использовался в контроллере вида.

...