这是一个奇怪的错误,可能只是我所知道的Xcode中的一个问题。我有一个标签栏控制器,其中第一个视图是一个UITableView(显然)有许多单元格。当您选择一个单元格时,我在MainStoryboard上设置了一个segue以转到详细视图控制器。我希望在进入详细视图时隐藏标签栏,因此我进入故事板,选择了我的详细视图,然后在编辑器界面中单击“隐藏底部栏”,以“模拟指标”开头。 / p>
一切正常,但是当我点击一个单元格时,UITableView屏幕顶部会闪烁一条黑条,向下放下tableview单元格(好像单元格在底部的标签栏下方落下) ,就在屏幕推到细节视图之前。这种效果根本没有害处,但它非常令人不安,我想顺利解决这个问题。
我发现的唯一解决办法就是取消选中故事板上的“推送时隐藏底栏”选项。这确实摆脱了那个黑条闪光,但当我进入细节视图时,标签栏当然停留在屏幕上,这是我不想要的。
有什么想法吗?
为了完整起见,我继续前进
[self.navigationController setToolbarHidden:YES animated: YES];
在详细视图控制器的viewWillAppear方法上(甚至尝试使用故事板选项打开和关闭),但没有区别。工具栏确实隐藏得很好,但我仍然在顶部有那条黑线。太奇怪了。
答案 0 :(得分:2)
我知道为时已晚!!!我遇到了同样的问题。看起来像视图的自动调整大小掩码是不正确的UIViewAutoresizingFlexibleTopMargin。我在xib文件中检查了这个。如果您尝试在代码中执行此操作,请确保此标志-UIViewAutoresizingFlexibleTopMargin - 不包含在自动调整掩码中。
希望这将有助于未来的某个人
答案 1 :(得分:1)
哇,我现在遇到了同样的问题,非常痛苦,网上没有关于它的信息。
无论如何,对我来说一个简单的解决方法是更改当前视图的框架向上移动y坐标并使标签栏的高度更大。如果在将新视图推送到导航控制器后直接完成,则解决了这个问题。此外,之后无需修复框架(必须在再次显示视图时更新)。
MonoTouch代码:
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);
答案 2 :(得分:1)
我知道这有点晚了,但我有同样的问题,我无法解决任何先前的答案。 (我想这是非接受的原因)。
问题是SecondViewController的view
大小与之前ViewController的视图大小相同,因此太小而无法容纳隐藏工具栏的ViewController。这就是为什么在转换发生时顶部可以看到UITabBarController
的黑色背景,而viewDidAppear
视图会在正确尺寸上拉伸。
对我来说,它有助于子类根UITabBarController并将背景颜色设置为与SecondViewController相同的背景颜色。
class RootViewController: UITabBarController {
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = Style.backgroundColor
}
}
然后你可以在故事板中选中复选框,它看起来不错。
P.S。
如果你有一些视图,那就是视图底部的位置,你需要设置底部约束,使它们小于49(因为这是工具栏的高度),然后是{{1}设置正确的约束。
例如:
我认为需要从底部边缘位置44 px。在此之前,我将约束设置为44,并且我对该视图有一些奇怪的行为。它被放置到高处,然后跳到正确的地方。
我通过将约束设置为-5 (44-49)来解决此问题,然后在viewDidAppear
中将约束设置回44.现在我对该视图有正常行为。
答案 3 :(得分:0)
在detailViewController的viewWillAppear中执行此操作,它应该可以正常工作
答案 4 :(得分:0)
您的导航控制器的子类,或者只是找到导航栏
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()
}