【问题标题】:iOS7 storyboard modal segue changes subviewsiOS7故事板模态segue更改子视图
【发布时间】:2014-09-12 19:01:21
【问题描述】:

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

然后,用户选择并执行导致情节提要中出现模态转场的操作,以查看控制器 B。这会正常加载 VC B。但是,我可以看到,正如模态转换正在为 B 设置动画一样,VC A 中由用户修改的子视图丢失了……它们恢复到最初加载的位置。然后,当 VC B 最终被解散并且转场回到 VC A 时,视图仍保留在那些原始位置——这意味着用户不会得到与他以前相同的子视图排列。这是糟糕的连续性,糟糕的体验。

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

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

【问题讨论】:

    标签: iphone objective-c uiviewcontroller storyboard autolayout


    【解决方案1】:

    这是因为自动布局。如果自动布局打开(默认情况下),那么您应该通过调整它们的约束而不是设置框架来移动或调整任何视图的大小。如果您确实设置了框架,一旦某些事情导致视图重新绘制,视图将恢复到由其约束定义的位置,而不是您设置的新位置。

    【讨论】:

    • 已修复!谢谢。我不认为这是自动布局,因为无论如何我都删除了所有约束。我必须做的唯一其他更改是我必须用 [[UIScreen mainScreen] bounds].size.height 替换我对某些屏幕位置数学的 self.view.window.frame.size.height 的使用...... .这可能更准确。
    【解决方案2】:

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

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

    我认为你应该通过这种方法改变帧或将数据传递给其他VC。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-26
      • 1970-01-01
      • 2013-05-24
      • 1970-01-01
      • 2014-11-23
      • 2012-05-12
      相关资源
      最近更新 更多