这是一个怪异的错误,这可能只是我所知道的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()
}