0

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

Просто пытаются получить содержимое появится ниже панели навигации и выше Tab Bar (ни с ней, оказывается ниже либо).

Я пробовал почти все, безрезультатно.

С помощью следующего кода внутри rootController, где я просто пытаюсь иметь вид (красную границу, чтобы помочь шоу, если он работает):

-(void)viewWillAppear:(BOOL)animated{ 

    [super viewWillAppear:animated]; 

    UIView *view1 = [[UIView alloc] initWithFrame:self.view.frame]; 
    view1.layer.borderColor = [UIColor redColor].CGColor; 
    view1.layer.borderWidth = 2.0f; 
    [self.view addSubview:view1]; 

} 

и установки как существа:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    // Override point for customization after application launch. 

    self.window.backgroundColor = [UIColor whiteColor]; 

    TSTFirstViewController *rootController = [[TSTFirstViewController alloc] init]; 
    rootController.title = @"Hello World"; 

    UINavigationController *firstRootController = [[UINavigationController alloc] initWithRootViewController:rootController]; 
    NSArray *viewControllers = @[firstRootController]; 

    UITabBarController *tabBar = [[UITabBarController alloc] init]; 
    tabBar.viewControllers = viewControllers; 
    tabBar.tabBar.barStyle = UIBarStyleBlack; 
    tabBar.tabBar.translucent = NO; 

    [self.window setRootViewController:tabBar]; 

    [self.window makeKeyAndVisible]; 
    return YES; 
} 

я получаю:

enter image description here

Если добавить два линии к моему AppDelegate:

firstRootController.navigationBar.translucent = NO; 
firstRootController.navigationBar.barStyle = UIBarStyleBlack; 

Это все получает очень неаккуратно:

enter image description here

Красная граница смещается вниз, нижняя граница исчезает ниже панели вкладок. И появляется большой пробел.

Если удалить полупрозрачность линии, а также добавить:

self.edgesForExtendedLayout = UIRectEdgeNone; 

в контроллер представления, я получаю:

enter image description here

Светопрозрачные бары, красную границу в нужном месте под навигационной панели , но нижняя граница внизу tabBar.

Я считаю, что я пробовал все комбинации и все идеи.

Может кто-нибудь, пожалуйста, скажите мне, как получить содержимое, подходящее под панелью навигации, над панелью вкладок без использования Interface Builder.

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

ответ

2

Да, вот ваше решение.

При использовании self.edgesForExtendedLayout = UIRectEdgeNone; любезно рассмотреть еще три вещи прошивкой 7 как

  1. Вы получили NavigationBar.
  2. У вас есть Status Bar (Время, сеть, дисплей батареи сверху)
  3. Вы также изучаете TabBar.

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

UIView *view1 = [[UIView alloc] initWithFrame:CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y, self.view.frame.size.width, self.view.frame.size.height-self.navigationController.navigationBar.frame.size.height-self.navigationController.tabBarController.tabBar.frame.size.height-[UIApplication sharedApplication].statusBarFrame.size.height)]; 
view1.layer.borderColor = [UIColor redColor].CGColor; 
view1.layer.borderWidth = 2.0f; 
[self.view addSubview:view1]; 

Вот скриншот с использованием этого кода.

Screen Shot is attached here

Я надеюсь, что помогает.

+0

Большое спасибо за помощь ... но я не могу не задаться вопросом, есть ли что-то более легкое, чем это? Я бы подумал, что использование 'self.edgesForExtendedLayout' бы соответствовало виду, не вычисляя высоту всех отдельных компонентов. – Darren

Смежные вопросы