在IB中使用"按下时隐藏底部栏"时,UITableView顶部的黑条闪烁



这是一个怪异的错误,这可能只是我所知道的XCode中的一个问题。我有一个选项卡栏控制器,其中第一个视图是(显然)许多单元格。当您选择一个单元格时,我已经在中间板上设置了一个segue,以转到详细信息视图控制器。我希望当我进入详细信息时隐藏标签栏,因此我进入了情节板,选择了详细信息,然后在编辑器屏幕上单击"底部底部",该屏幕以"模拟指标"开头。<<<<<<<<

一切正常,除了我点击一个单元格时,一个黑色的条闪烁在Uaithitview屏幕的顶部,将表视图单元格放下(好像单元格在底部的标签栏下),就在屏幕推到详细视图之前。效果一点都不有害,但这是非常令人不安的,我想让这一切顺利进行。

我发现的唯一解决方案是取消选中情节提要上的"底栏"选项的"底栏"选项。确实确实摆脱了那个黑色的bar闪光灯,但是当我进入详细信息时,当然,标签栏会留在屏幕上,这是我不想要的。

有什么想法?

只是为了完整的缘故,我继续跑步

[self.navigationController setToolbarHidden:YES animated: YES];

在详细信息视图控制器的ViewWillAppear方法上(甚至都使用故事板选项和关闭的故事板选项尝试),但没有区别。工具栏确实藏起来了,但是我仍然在顶部得到那条黑线。太奇怪了。

我知道为时已晚!!!我遇到了同一问题。看来,该视图的自动调整蒙版是不正确的,因为uiviewAutoresizingFlexibletopMargin确切地说是不正确的。我在XIB文件中检查了一下。如果您想在代码中执行此操作,请确保此标志-UiviewAutoresizingFlexibletopMargin-未包含在自动化蒙版中。

希望这将在将来有所帮助

我知道这有点迟了,但是我有同样的问题,我无法用以前的任何答案解决它。(我想这是不接受的原因)。

问题在于,第二视图Controller的view大小与以前的ViewController的视图大小相同,因此太小,无法放入带有工具栏隐藏的ViewController中。这就是为什么在过渡发生时UITabBarController的黑色背景在顶部可见,并且在viewDidAppear视图上将延伸到正确的大小。

对我来说,它有助于将根uitabbarcontroller子亚级亚级,并将背景颜色设置为与SecondViewController相同的背景颜色。

class RootViewController: UITabBarController {
    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.backgroundColor = Style.backgroundColor
    }
}

然后,您可以将复选框放在情节板内,看起来还可以。

P.S。

如果您有一些视图,即位于视图的底部,则需要设置底部约束,以便它们较小,以少49(因为这是工具栏的高度),然后在viewDidAppear上设置右边约束。

例如:
我认为需要从底部边缘开始是位置44 PX。以前,我的约束设置为44,并且对该观点有一些奇怪的行为。它被放置在高度,然后跳到正确的位置。
我将其设置为-5 (44-49),然后在viewDidAppear中将约束设置回44。

哇,我现在遇到了同样的问题,非常痛苦,网上没有关于它的信息。

无论如何,对我来说,一个简单的解决方法是更改当前视图的框架,将Y坐标移动并使高度延长到TAB栏的高度。如果将新视图推向导航控制器后,这将解决问题。另外,此后无需修复框架(在再次显示视图时必须进行更新)。

单触摸代码:

UIViewController viewControllerToPush = new MyViewController();
viewControllerToPush.HidesBottomBarWhenPushed = true; // I had this in the MyViewController's constructor, doesn't make any difference
this.NavigationController.PushViewController(viewControllerToPush, true);
float offset = this.TabBarController.TabBar.Frame.Height;
this.View.Frame = new System.Drawing.RectangleF(0, -offset, this.View.Frame.Width, this.View.Frame.Height + offset);

目标C代码(未经测试,只是单触摸代码的翻译):

UIViewController *viewControllerToPush = [MyViewController new];
viewControllerToPush.hidesBottomBarWhenPushed = YES;    viewControllerToPush.hidesBottomBarWhenPushed = YES;
float offset = self.tabBarController.tabBar.frame.size.height;  float offset = self.tabBarController.tabBar.frame.size.height;
self.view.frame = CGRectMake(0, -offset, self.view.frame.width, self.view.frame.height + offset);   self.view.frame = CGRectMake(0, -offset, self.view.frame.size.width, self.view.frame.size.height + offset);

在详细信息视图controller的ViewWillAppear中执行此操作,它应该正常工作

子类导航控制器,或者只是找到导航栏

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)
    let backdropEffectView = navigationBar.subviews[0].subviews[0].subviews[0] //_UIBackdropEffectView
    let visualEffectView: UIVisualEffectView = UIVisualEffectView(effect: UIBlurEffect(style: .Light))
    visualEffectView.frame = backdropEffectView.frame
    backdropEffectView.superview?.insertSubview(visualEffectView, aboveSubview: backdropEffectView)
    backdropEffectView.removeFromSuperview()
}

最新更新