【问题标题】:UITabBar overlaps its viewUITabBar 与视图重叠
【发布时间】:2014-08-07 11:37:56
【问题描述】:

在我的应用程序中,我使用的是 UITabBarController。这是它在 IB 中的样子:

TabBarController 用作窗口的 rootViewController。

这是我用视图填充 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 显示某些内容,它可以自动完成,它显示在里面而不是下面。

【问题讨论】:

    标签: objective-c uiview uitabbarcontroller


    【解决方案1】:

    从 iOS7 开始,大部分导航项(包括标签栏)都是半透明的。例如,通过这种方法,用户可以看到 UITableView 中的滚动单元格。

    有两种方法可以处理您的问题:

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

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

    但在我看来,更可取的方式是使用 AutoLayout 和

    设置自动布局

    您可以通过编程方式做到这一点:

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

    或使用故事板:

    【讨论】:

    • self.edgesForExtendedLayout = UIRectEdgeNone 正是我需要的!谢谢。
    • 还有一个问题。如果我使用您建议的第一个解决方案,它适用于标签栏,但不适用于状态栏。状态栏始终与视图重叠。我该如何解决这个问题?
    【解决方案2】:

    这对我有用

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-11
      • 2016-05-18
      • 2011-11-21
      • 1970-01-01
      相关资源
      最近更新 更多