Push segue 搞乱了约束

Posted

技术标签:

【中文标题】Push segue 搞乱了约束【英文标题】:Push segue is messing with constraints 【发布时间】:2014-06-03 16:08:17 【问题描述】:

我有一个从我家UIViewControllerUITabBarController 的推送转场。我需要使用push segue,因为我需要在顶部有一个导航栏,并且我不能在导航控制器中嵌入UITabBarController

当我执行初始转场时,它会转到UITabBarController,然后在导航栏下方和我的内容上方创建一个小边距。当我切换选项卡时,即使我切换回初始选项卡,也会删除此填充。然后,当我使用 Push Segue 的后退按钮时,我的根视图控制器失去了一些约束:我在这里有一个 collectionView,它向上推到页面上的一些按钮下方。

以前按钮有一个奇怪的变化,然后现在它们不动了,因为我修复了约束。但是,CollectionView 的限制似乎很好。

看起来更像是 CollectionView 内的项目正在向上移动,而不是 CollectionView 本身。这可能吗?我可以解决这个问题吗?

当我切换到 Modal segue 而不是 push 时,不会发生这种情况。 关于如何解决这个奇怪问题的任何建议?或者有人可以建议一个让模态转场为我的 TabViewController 工作的好方法吗?

谢谢!!

【问题讨论】:

【参考方案1】:

我终于在这里修改了 Zsolt 勋爵的答案来解决这个问题。

- (void)viewDidLayoutSubviews 

if (self.searchBar.frame.origin.y == 20) 
    [self.searchBar setFrame:CGRectMake(0, 0, self.searchBar.frame.size.width, self.searchBar.frame.size.height)];
    [self.ptasksTable setFrame:CGRectMake(0, 44, self.ptasksTable.frame.size.width, self.ptasksTable.frame.size.height+20)];
     

我正在检查视图中第一项的原点是否为y=20,如果是,请将 y 原点设置为 0,并将下面的 TableView 的大小增加 20 以填充空间。

【讨论】:

以上是关于Push segue 搞乱了约束的主要内容,如果未能解决你的问题,请参考以下文章

UITableView 布局在 push segue 和 return 上搞砸了。 (iOS 8、Xcode beta 5、Swift)

8.1.20示例:类型安全性与装载约束

为啥设置约束后不能再调整 NSWindow 的大小?

UIStoryboardSegue 嵌入

iOS边练边学--Segue数据逆传(用block代替delegate)

负环与差分约束