TabBarController的AutoLayout问题

时间:2017-05-07 19:51:19

标签: ios iphone xcode autolayout

我遇到了一个非常尴尬的自动布局问题。我有一个导航控制器,我已将其rootviewcontroller设置为tabbarview控制器用于某些目的。见图2:

enter image description here

在上图中,您可以看到有6个viewcontroller与tabbarviewcontroller连接。

  • 在第3个第4和第5个视图控制器中添加了一个白色视图并自动布局如下:

enter image description here

现在,在我选择标签3或4后运行,添加的视图完全按照我的需要显示,并且根据自动布局显示它应该显示。如下: enter image description here  enter image description here

现在,当我选择“更多”时,它显示一个tableviewcontroller,因为它应该根据它的默认行为,如下所示:

enter image description here

出现问题,现在如果您从列表中选择任何项目并转到受尊重的视图控制器,则添加的白色视图将从导航栏中下移。我不明白为什么会这样。请在图片中看到:

enter image description here enter image description here

整天我试图解决这个问题,但没有任何反应,有些人如何得到一个解决方案,但这不是我在这里需要的。即见下图:

enter image description here

如果为该视图控制器取消选中“Top Top Bars”,那么它的工作正常,但它会影响导航栏,我不想在这里。请看图片:

enter image description here

这里有人遇到过类似的问题并找到了完美的解决方案而我正在寻求帮助。

注意:在任何视图控制器中都没有使用任何类,所有类都在故事板中。

提前致谢。

2 个答案:

答案 0 :(得分:1)

这是问题,有两个导航栏....你可以跟踪视图层次结构.....你能解释一下你想要的吗?

答案 1 :(得分:0)

为我的tabbarcontroller取了一个UiTbaBarControllerClass,在那个控制器中我设置了委托自己并按照我的代码,现在它按照我想要的方式工作。非常感谢@KKRocks

<强>代码:

 #import "TabBarController.h"

    @interface TabBarController ()<UITabBarControllerDelegate>

    @end

    @implementation TabBarController

    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view.

        self.delegate = self;
    }

#pragma mark UITabBarController Delegate

    - (void)tabBarController:(UITabBarController *)tabBarController
     didSelectViewController:(UIViewController *)viewController
    {
        NSLog(@"controller class: %@", NSStringFromClass([viewController class]));
        NSLog(@"controller title: %@", viewController.title);

        if ([viewController.title isEqual:@"More"]) {

           [self.navigationController setNavigationBarHidden: YES animated: NO];
        }
    }

Swift

class TabBarController: UITabBarController, UITabBarControllerDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        self.delegate = self
    }

// MARK: UITabBarController Delegate

    func tabBarController(_ tabBarController: UITabBarController, didSelectViewController viewController: UIViewController) {

        print("controller class: \(String(describing: viewController.self))")

        print("controller title: \(String(describing: viewController.title))")

        if viewController.title?.isEqual("More") {

            navigationController?.setNavigationBarHidden(true, animated: false)
        }
    }
}

现在它工作得非常好。 :)