【发布时间】:2013-07-26 00:41:11
【问题描述】:
概述:我有一个奇怪的错误,我的纵向视图右侧的按钮在旋转到横向然后再次返回纵向后不起作用。
详细信息:这是产生问题的场景。如果我从纵向开始,我所有的按钮都会起作用。我旋转到横向(参见下面的代码)并且所有按钮都可以工作。我旋转回纵向,屏幕右侧 1/4 的按钮没有响应。就像有一个透明的视图覆盖了这些按钮。奇怪的是,如果按钮的一部分伸出那个隐形屏障的左侧,我可以点击按钮的那部分,但不能点击“封面”“下方”的右侧部分。如果此时我要旋转到横向,横向中的所有按钮都会起作用。当我旋转回纵向时,那个看不见的“封面”已经向左移动了另外 1/4 以覆盖大约 1/2 的屏幕。如果我再次旋转到横向(所有按钮始终以横向工作)然后回到纵向,则不可见的“封面”已经移动了另外 1/4 以覆盖屏幕的 3/4。最终,我的控件都没有纵向响应。
重要项目信息:
- 这个应用程序是通用的。该问题仅在 iPad 纵向模式下发生。 iPhone 版本在纵向(或横向)模式下从不显示此问题。
- 只有 3 个视图:容器视图(即根)、纵向视图和横向视图。
- 此应用是 ARC,面向 6.1。我有所有正确的方法来处理旋转事件。
这是旋转视图的代码:
[portrait removeFromSuperview];
[landscape removeFromSuperview];
UIDeviceOrientation currentOrientation = [[UIDevice currentDevice] orientation];
if (currentOrientation==UIDeviceOrientationUnknown) {
currentOrientation = (UIDeviceOrientation)[[UIApplication sharedApplication] statusBarOrientation];
}
if ((currentOrientation == 0) || (UIInterfaceOrientationIsPortrait(currentOrientation))) {
[[self view] addSubview:portrait];
}
else { //landscape
[[self view] addSubview:landscape];
}
我的尝试:
- 我发现听起来很相似的问题提到了使用 Instruments 检查内存泄漏。我尝试了僵尸和分配模板,并没有看到任何奇怪的东西(尽管这是我第一次使用 Instruments)。
- 编辑:所有这些都在模拟器中,我还没有在设备上测试过这个问题。
感谢您的帮助。
【问题讨论】:
-
您是否在运行时查询了子视图并为每个子视图添加了边框以便查看它们的位置?
-
这与内存泄漏无关,按钮可能超出了它们的超级视图范围。给 superview 一个背景颜色,这样你就可以看到它在哪里,看看是否发生了这种情况。
-
您可以检查两件事: 1. 按钮应该在其父视图的范围内。 2.按钮超级视图的用户交互应该是YES。
-
更简单,将superview的
clipsToBounds属性设置为YES。 -
找到答案! 纵向视图打开了自动调整大小(所有弹簧和支柱),而横向视图仅打开了顶部和左侧支柱。我将肖像的弹簧和支柱与风景的视图相匹配,这样就解决了这个问题。顺便说一句,superview 已经检查了 autoresize 子视图。
标签: ios rotation uibutton landscape-portrait