Не уверен, почему UIView подталкивается примерно на 10 пикселей - PullRequest
10 голосов
/ 28 июня 2009

Я создал простое приложение для iPhone, в котором есть два файла .xib. В том случае, когда делегат приложения завершил запуск, я отображаю первый файл .xib, вызывая:

[window addSubview:myView];

и я делаю то же самое на IBAction для кнопки UIB, чтобы изменить представление на myView2.

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

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

РЕДАКТИРОВАТЬ: Я немного сузил проблему. Я использую два метода для загрузки подпредставления. Когда я загружаю первый вид внутри applicationDidFinishLaunching все нормально. Однако если я заменю два сообщения на window методом [self originalView], то все пойдет не так.

- (void)applicationDidFinishLaunching:(UIApplication *)application {    
    //[self originalView];  <- I want to use this instead of the following two lines

    // Override point for customization after app launch    
    [window addSubview:viewController.view];
    [window makeKeyAndVisible];

}

-(void)endView{
    endV = [[EndViewController alloc] initWithNibName:@"EndView" bundle:nil];
    [window removeFromSuperview];
    [window addSubview:endV.view];  
}
-(void)originalView{
    viewController = [[MyAppViewController alloc] init];
    [window removeFromSuperview];
    [window addSubview:viewController.view];

}

Из того, что я вижу, я всегда вызываю одни и те же строки кода, независимо от того, находится ли он внутри applicationDidFinishLaunching или в [self originalView], но кажется, что window оказывается другим объектом.

Ответы [ 5 ]

12 голосов
/ 28 июня 2009

При использовании UIViewController обычным способом (т. Е. выдвигая его на UINavigationController ), он настраивает рамку своего представления.

Поскольку вы добавляете подпредставление вручную, вы должны настроитьрамка сама.Начало координат находится в верхнем правом углу (вверху строки состояния).Вы хотите сдвинуть изображение на 20 пикселей вниз.

5 голосов
/ 05 января 2011

Вот мое решение:

// adjust the frame of subview which is going to be add
self.navController.view.frame = CGRectMake(0, 0, 320, 460);
[self.view addSubView:self.navController.view];

Теперь у меня все отлично, удачи ~:)

2 голосов
/ 30 июня 2009

В построителе интерфейса вы можете добавить симулированные элементы интерфейса, которые будут появляться программно (например, строка состояния или панель навигации). В инспекторе выберите свое представление и перейдите на вкладку «Атрибуты». Здесь вы можете смоделировать строку состояния, верхнюю или нижнюю панель.

1 голос
/ 18 июня 2013

Всякий раз, когда появляется странный пробел или вид частично скрывается за строкой состояния, он имеет какое-то отношение либо к

  1. shouldAutorotate определение в вашем корневом контроллере - не уверен, является ли это ошибкой или нет, но старайтесь быть последовательным с возвратом этой функции для всех подчиненных контроллеров (обычно это приводит к тому, что viewcontroller скрывается за строкой состояния)
  2. a WantFullscreen определение подпредставления - если возможно, установите значение NO

У меня были обе ошибки в моем приложении, и я решил их! Надеюсь, я смогу сэкономить вам время (я много потратил на это)

1 голос
/ 14 ноября 2012

Похоже, вы вызываете pushVC для этого UIViewController в неправильном месте. У меня такая же проблема. Это было решено перемещением [self.navigationController pushViewController: animated:] из viewDidLoad в viewDidAppear: в предыдущем UIViewController в иерархии.

...