Ios 用户界面不';t切换到新的视图控制器时

Ios 用户界面不';t切换到新的视图控制器时,ios,swift,segue,viewcontroller,Ios,Swift,Segue,Viewcontroller,在我的应用程序中,我从一个视图控制器(选项ViewController,这里是OVC)移动到另一个视图控制器(主视图控制器,或MVC)。在OVC中,我只有一些滑块和开关,它们允许用户设置与MVC相关的各种选项。当加载MVC时,它会实例化一个自定义标签,即滚动标签,它实际上只是设备内由加速计控制的UIScrollView中的UILabel 要在OVC和MVC之间切换,我只需要一个按钮,上面有一个连接两个按钮的序列,该序列将设置传递到MVC。然后,MVC使用给定的设置创建一个新的滚动标签,并开始滚动

在我的应用程序中,我从一个视图控制器(选项ViewController,这里是OVC)移动到另一个视图控制器(主视图控制器,或MVC)。在OVC中,我只有一些滑块和开关,它们允许用户设置与MVC相关的各种选项。当加载MVC时,它会实例化一个自定义标签,即
滚动标签
,它实际上只是设备内由加速计控制的UIScrollView中的UILabel

要在OVC和MVC之间切换,我只需要一个按钮,上面有一个连接两个按钮的序列,该序列将设置传递到MVC。然后,MVC使用给定的设置创建一个新的滚动标签,并开始滚动,以便用户可以使用加速计控制整个界面。在MVC上,我有一个重置按钮,该按钮将返回OVC,并从superview中删除
滚动标签
(通过从superview中删除其组成部分UIScrollView)。通过这种方式,您可以在两个控制器之间来回切换

所有这些都非常有效,除了在一个罕见但可复制的例子中。当我将
ScrollingLabel
文本的fontSize设置为一个较大的值(比如200,在横向模式下,它转换为在任何给定时间在屏幕上每行可见的大约10个字符),然后通过各自的segue按钮在OVC和MVC之间来回切换时,就会发生异常。字体大小为200,这是我第四次尝试从OVC切换到MVC(这意味着我已经成功地从OVC切换到MVC并返回了3次),屏幕冻结

屏幕将卡在OVC的视图上,有趣的是,在没有用户输入的情况下,屏幕上会随机生成大的黑色矩形,这些矩形再次以大约10+秒的频率随机闪烁。还有一些异常。我在MVC viewDidLoad()中添加了一些打印语句,是的,即使在第四次加载MVC时,视图仍保留在OVC上,OVC现在是不可交互的,并定期开发前面提到的黑色矩形

我对此感到困惑,因此进一步测试。在第四次之后,我倾斜了iPad,这样如果MVC真的在OVC后面加载,它的
滚动标签中的文本就会滚动,我可以检查它的内容偏移量是否发生了变化。我决定使用home按钮退出应用程序,然后单击应用程序图标重新进入。让我非常惊讶的是,这一点现在已经向MVC开放,通过我使用加速计正确地移动了文本。这意味着MVC确实在OVC后面加载,并从加速计获取数据,但由于某些原因OVC仍保留在屏幕上

更令人困惑的是,在完成了整个“使用主页按钮退出,通过应用程序图标重新输入”的技巧之后,问题没有再次出现,直到我从XCode重建,此时整个过程重置,第四个OVC->MVC转换冻结

所以现在我很困惑,真的不知道为什么会有这样的发展。我想,当我重置回OVC时,可能我没有正确地在MVC中解除分配
滚动标签
,这对于足够大的fontSize来说可能非常昂贵,但由于我每次重新进入MVC时都重新创建标签,我不确定。任何帮助都将不胜感激,我很乐意根据需要提供代码或更多信息


tl;dr-从一个视图控制器到另一个视图控制器的切换会在屏幕上留下原始视图控制器图像,但仍然允许在没有任何视觉指示的情况下控制正确的视图控制器元素。

如何从OVC切换回MVC

如果您不使用展开序列,则每次返回序列时,都会在前一个OVC/MVC对的顶部堆叠一个新的OVC实例

将OVC的地址记录在其视图中。我打赌你会发现你每次都会得到一个新的

如果您执行导航控制器推送,则会给我们一个iAction,其中包含一个popViewController调用

如果您正在执行模式
presentViewController:animated:completion:
,请在OVC的后退按钮上使用iAction调用
dismissViewController:animated:completion:


交替地执行一个展开序列。

我执行了展开序列,但没有效果,问题仍然存在:在第三次MVC->OVC重置后,使用大小200字体,尝试从OVC->MVC中分离会再次导致所有内容冻结,只能通过“主页”按钮退出,然后单击应用程序重新进入,然后直接加载(正确)转换到MVC。当从MVC转换回OVC时,是否有方法检查
ScrollingLabel
组件(UILabel/UIScrollview)segue之后仍然存在?目前我只是从superview中删除了scrollview;也许这还不够?我应该提到,对于较小的字体大小,问题不会像以前那样经常出现,事实上,我无法以更小的字体大小(例如80)重现它,这就是为什么我认为
滚动的字体大小/组件ingLabel
可能是罪魁祸首。快速跟进:事实证明,它在较小的字体大小下仍然是可复制的,只是时间要长得多。例如,80号字体需要31个OVC->MVC->OVC循环才能冻结并显示相同的行为,140号字体需要11个循环才能显示相同的行为。