2

我有三个 UIViewControllers 模态显示在彼此之上。第三个打开一个 MFMailComposeViewController 并发送一封电子邮件。但是,在关闭该视图控制器后,其他视图控制器(不一定在视图控制器链中)上的各种控件已移动到位。

例如,在关闭 MFMailComposeViewController 后,父 ViewController 上的其中一个标签向下移动了大约 20px。它的父级上的滚动视图也向下移动了相同的数量。如果我从这里输入一个单独的视图控制器,则会替换一个 imageview。它们似乎总是靠近屏幕顶部的控件,并且每个屏幕只有一个。

有没有人见过这个?我检查了所有代码,没有任何可能导致它。每次显示屏幕时,我都必须重置这些控件上的框架,以防止它们出现不合适的位置。但这对我来说毫无意义。

谢谢。

4

2 回答 2

1

您是否尝试过从父视图控制器呈现它?我有一个类似的问题,它解决了这个问题。

于 2012-10-09T00:09:52.393 回答
0

不知何故,这听起来像随机布局并没有发生。我可以想到一些可以尝试的方法:

  • 检查你没有明确调用-layoutIfNeeded,尤其是在像-setFrame:or这样的地方-sizeThatFits:——它可能会导致整个视图树的布局,如果布局已经发生,这往往会做错事(在 iOS 5 上它可能导致布局不一致;在iOS 6 我观察到它卡在布局循环中)。您还需要小心一些执行布局作为副作用的方法(UIButton.titleLabel想到 - 修复是在将视图添加到层​​次结构之前调用它)。
  • 如果您正在使用自动调整大小,那么它应该可以正常工作 - 除非我看到如果视图在框架更改时没有附加到窗口,它就不起作用。
  • 如果您在 中进行布局-layoutSubviews,请覆盖-setFrame:调用-setNeedsLayout. 通常的症状是“切换标签、旋转、切换回”导致布局不正确。
于 2012-10-09T02:48:20.053 回答