UITabBar与其视图重叠

时间:2014-06-17 12:42:43

标签: objective-c uiview uitabbarcontroller

在我的应用中,我正在使用UITabBarController。这就是IB中的样子:

enter image description here

TabBarController用作窗口的rootViewController。

这是我的代码,我在其中填充了带有views的TabBarController:

tabBar = [[UITabBarController alloc]init];

myViewController1 = [[MyViewController1 alloc] initWithNibName:@"View1" bundle:nil];
myViewController2 = [[MyViewController2 alloc] initWithNibName:@"View2" bundle:nil];
myViewController3 = [[MyViewController3 alloc] initWithNibName:@"View3" bundle:nil];

tabBar.viewControllers = [NSArray arrayWithObjects: myViewController1, myViewController2, myViewController3, nil];

[self.view addSubview:tabBar.view];

如果某些视图显示在TabBarController中,它位于TabBar下(此视图的高度为红线) - 所以如果我有一些TableView,我就看不到最后一行或两行。如何在TabBarController中显示视图(如绿色矩形) - 不在标签栏下?

我认为它可以自动完成,如果我在使用UITabBarController时显示某些东西,它会显示在里面。

2 个答案:

答案 0 :(得分:3)

由于iOS7大多数导航项目(包括标签栏)都是半透明的。通过这种方法,用户可以看到,例如,在UITableView中滚动单元格。

有两种方法可以解决您的问题:

选择在半透明UI元素下扩展控制器:

if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
    self.edgesForExtendedLayout = UIRectEdgeNone;

但从我的观点来看,最好的方法是使用AutoLayout和

设置AutoLayouts

您可以通过编程方式执行此操作:

[view setTranslatesAutoresizingMaskIntoConstraints: NO];
id topGuide = myViewController.topLayoutGuide;
NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings (view, topGuide);

[myViewController.view addConstraints:
    [NSLayoutConstraint constraintsWithVisualFormat: @"V:[topGuide]-[view]"
    options: 0
    metrics: nil
    views: viewsDictionary]
];

或使用故事板: enter image description here

答案 1 :(得分:1)

这对我有用

class TabBarController: UITabBarController {

override func viewDidLoad() {
    super.viewDidLoad()
   
    // this will force child controller's view to be above Tab Bar        
    tabBar.isTranslucent = false
}