iOS7故事板模态segue更改子视图

时间:2014-07-22 04:58:41

标签: iphone objective-c uiviewcontroller storyboard autolayout

我有一个带故事板的应用程序。我从故事板中的视图控制器A开始。此VC A具有多个视图/子视图。在运行时,用户可以从最初加载的位置修改/调整/移动这些子视图。它工作正常。

然后用户在故事板中选择导致模态segue的动作,以查看控制器B.这样可以正常加载VC B.但是,我可以看到,正如模态转换为B动画一样,VC A中由用户修改的子视图丢失了......它们将恢复到最初加载的位置。然后当VC B最终被解散并且segue退回到VC A时,视图仍然回到那些原始位置 - 这意味着用户没有得到他之前所拥有的相同的子视图排列。它的连续性差,经验不好。

这里发生了什么?如何通过模态segue和back来保留这些子视图?我已经尝试了几个步骤,包括保存子视图'框架(在viewWillDisappear中)并恢复它们(在viewWillAppear中),但它不起作用......这些子视图不会在新位置重新绘制。我假设这些viewWill / viewDid实现与视图移动不兼容。

奇怪,我还有一个集合视图,其内容在转换过程中不会丢失......似乎只是这些子视图位置/帧。

2 个答案:

答案 0 :(得分:0)

我认为你必须使用以下方法

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    UIViewController *destVC = (UIViewController *)segue.destinationViewController;
    destVC.view.backgroundColor = [UIColor blueColor];
}

我认为您应该通过此方法更改帧或将数据传递给其他VC。

答案 1 :(得分:0)

这是因为自动布局。如果启用了自动布局(默认情况下),则应通过调整约束而不是设置框架来移动或调整任何视图的大小。如果你设置了帧,一旦某些东西导致视图重新绘制,视图将恢复到由它们的约束定义的位置,而不是你设置它们的新位置。