Не уверен, почему UIView подталкивается примерно на 10 пикселей.

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

[window addSubview:myView];

и я делаю то же самое в IBAction для UIButton, чтобы изменить представление на 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 оказывается другим объектом.


person mac_55    schedule 28.06.2009    source источник


Ответы (5)


При использовании UIViewController обычным способом (т.е. SW1" rel="noreferrer">нажимая его на UINavigationController), он корректирует рамку своего представления.

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

person Nikolai Ruhe    schedule 28.06.2009
comment
Во всех примерах, которые я видел, используется UINavigationController для отображения иерархии списков. Это то, для чего он используется? Или я могу использовать его для управления отображаемыми представлениями, даже если им не нужна панель навигации и т. д.? - person mac_55; 28.06.2009

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

// 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];

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

person firestoke    schedule 05.01.2011

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

person Reed Olsen    schedule 29.06.2009

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

person iiFreeman    schedule 14.11.2012

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

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

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

person MarkHim    schedule 18.06.2013