pushViewController 使用 hidesBottomBarWhenPushed (iphone6) 导致自动布局问题

Posted

技术标签:

【中文标题】pushViewController 使用 hidesBottomBarWhenPushed (iphone6) 导致自动布局问题【英文标题】:pushViewController cause autoLayout issue using hidesBottomBarWhenPushed (iphone6) 【发布时间】:2014-12-03 08:21:06 【问题描述】:

我有一个 FirstViewControllerTabBarControllerNavigationController (TabBarController > NavigationController > UIViewController)

firstViewController上按UIButton时,会推送到SecondViewController

SecondViewController *vc2 = [self.storyboard instantiateViewControllerWithIdentifier:@"BVC"];

vc2.hidesBottomBarWhenPushed = YES;

[self.navigationController pushViewController:vc2 animated:YES];

SecondViewController 的右下角有一个UILabel,带有约束 - (Width-Equal, Height-Equal, TrailingSpaceToSuperView = 16,BottomSpaceToBottomLayoutGuide = 20)

结果在 iphone4s(ios7) 上运行良好,但在 iphone6(IOS8.1) 上,UILabel 将首先出现在右下角加上大约 1 秒的“BottomBar 高度”,然后将更新到正确的位置( BottomSpaceToBottomLayoutGuide = 20)

当我将 pushViewController 动画设置为 NO 时,UILabel 将立即显示在正确的位置。

[self.navigationController pushViewController:vc2 animated:NO];

有人遇到同样的问题吗?

【问题讨论】:

当这种情况发生在我身上时,我会通过重置约束来修复它,或者我将它留给 XCOde 建议来应用约束 是的,谢谢您的建议。虽然,当涉及到屏幕按钮上的视图(Height-Equals TrailingSpace、LeadingSpace、bottomSpace)时,这个建议不起作用。 【参考方案1】:

我已经解决了这个问题。选择 BottomSpaceToBottomLayoutGuide 约束的底部。

【讨论】:

隐藏在 Xcode 7 中,但仍然有效:***.com/questions/29021129/…【参考方案2】:

@Jenny 的方法现在隐藏在 Xcode 7 中,但您可以将情节提要作为源代码打开,找到此约束并手动将其设置为“底部”。为了简化搜索,只需从 Identity Inspector 复制其 ObjectID。

【讨论】:

以上是关于pushViewController 使用 hidesBottomBarWhenPushed (iphone6) 导致自动布局问题的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI - 使用“pushViewController”时出现致命错误

在 UITabController 中的选项卡之间切换时使用“pushViewController”动画

使用 NavigationController.PushViewController 的 BeginAnimations 和 CommitAnimations

我可以将 pushViewController 与 UISegmentedControl 一起使用吗?

使用 Tabbar 管理 PushViewController

Monotouch:如何使用 NavigationController.PushViewController 更改视图更改的默认动画