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

StackOverflow https://stackoverflow.com/questions/1054539

Вопрос

Я создал простое приложение для 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 оказывается, это другой объект.

Это было полезно?

Решение

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

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

Другие советы

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top