第一次在堆栈溢出时发送。
我花了几个小时浏览了很多谷歌搜索,现在,我几乎已经记住了UIView和UIViewController的类参考文档。无论我做什么,我的应用程序都忽略了我在方向改变时调整视图大小的努力(或任何其他框架大小的修改)。
这里不涉及任何nib或xib;我正在以编程方式构建我所有的视图和视图控制器,它们(视图控制器)都是我创建的三个自定义UIViewController子类中的一个的子类。这些超类的loadView中有以下几行:
[self setView:[[[UIView alloc] initWithFrame:[self viewFrame]] autorelease]];
[[self view] setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)];
[[self view] setAutoresizesSubviews:TRUE];在所有适当的setter方法中(换句话说,我在任何地方添加subView ),我都在重复应用autoresizingMask的步骤。似乎无论我做什么,结果都是一样的--我单击build,单击debug,等待应用程序启动,旋转设备,然后即刻完成!视图会旋转,但根本不会调整大小。
这里我漏掉了什么?这可能是一些明显的东西,我只是没有看到。任何帮助都是非常感谢的,提前谢谢。
发布于 2010-09-19 18:47:38
嗯,果然,这是我自己的错。
第一课:你通宵尝试修复损坏的代码并没有给自己带来任何好处。休息一下吧!多喝水!如果你一直试图强迫你的大脑在睡前执行复杂的算法策略和逻辑,你只会让事情变得更糟。
原来,我在视图层次结构的底部有一个流氓UIView,它根本没有设置自动调整大小属性。我以为我已经把所有的东西都看过了,但结果我漏掉了一个。(只有一个小小的视图,和一整天的拍摄!)
对于后来遇到类似挫折的任何人,我可以说,Autoresizing确实可以像文档中描述的那样工作。如果你认为“有些东西没有被调用”,那么你可能找错了地方。此外,UIViewAutoresizingMask枚举常量的使用方式与它们在接口生成器中的使用方式不完全相同。在IB中,您“锁定”页边距,而在以编程方式设置它们时,默认假定锁定的页边距,并通过将其设置为“灵活”来“解锁”它们。因此,例如,仅设置FlexibleWidth和FlexibleHeight位相当于启用IB中的所有自动调整大小选项。通过抛出任何边距掩码(即UIViewAutoresizingFlexibleLeftMargin),您将在IB中“取消选择”相应的边距自动调整大小选项。(我看过很多其他的帖子,这对一些人来说似乎是一个主要的困惑点。)
然而,在我的研究中,我确实注意到,当UIView被调整大小时,似乎没有任何类型的事件、消息、通知或其他东西,无论是自动的还是非自动的。虽然不需要调整subViews的大小,但如果您希望在scrollView或tableView的框架大小发生变化时使其滚动,那么当它发生变化时,这将是一件很好的事情。我知道当键盘弹出时,可以很容易地做到这一点,因为周围有一个通知系统以及TextField delegate方法。所以也许可以作为另一篇文章的主题。
不管怎样,感谢所有在StackOverflow上参与的人!
https://stackoverflow.com/questions/3741566
复制相似问题