第一次在堆栈溢出中发布。

我花了数小时时间搜寻许多Google搜索,并且实际上已经记住了UIView和UIViewController类的引用文档。无论我做什么,我的应用程序都忽略了我为调整方向变化(或对此问题进行的任何其他框架尺寸更改)的大小而做出的努力。

没有 Nib 或小臂;我正在以编程方式构建所有 View 和 View Controller ,它们( View Controller )都是我创建的三个自定义UIViewController子类之一的子类。这些父类(super class)在其loadView中包含以下几行:方法...

[self setView:[[[UIView alloc] initWithFrame:[self viewFrame]] autorelease]];
[[self view] setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)];
[[self view] setAutoresizesSubviews:TRUE];

在所有适当的setter方法中(无论我在何处添加subView),我都在重复应用autoresizingMask的步骤。看来,不管我做什么,结果总是一样的-我单击构建,单击调试,等待应用启动,旋转设备,然后保存! View 旋转,但根本不调整大小。

我在这里想念什么?我可能没有看到,这很明显。非常感谢您的任何帮助,在此先感谢您。

最佳答案

好吧,当然,这是我自己的错。

第一课:熬夜试图修复损坏的代码对自己没有任何帮助。休息一下!多喝水!如果您一直试图迫使大脑在 sleep 前执行复杂的算法策略和逻辑,则可能只会使情况变得更糟。

原来,我对 View 层次结构底部的UIView流氓,根本没有设置autoresize属性。我以为我浏览了所有内容,但结果却错过了。 (只需一个小 View ,一整天就可以拍摄!)

我可以说,对于后来遇到类似挫败感的任何人,Autoresizing确实可以按文档所述工作。如果您认为“未调用某事”,那么您可能正在寻找错误的位置。另外,UIViewAutoresizingMask枚举常量的使用方式与在Interface Builder中的使用方式并不完全相同。在IB中,您“锁定”了页边距,而在以编程方式设置它们时,默认情况下采用了锁定的页边距,并通过将其设置为“灵活”来“解锁”它们。因此,例如,仅设置FlexibleWidth和FlexibleHeight位等效于启用IB中的所有自动调整大小选项。通过抛出任何边距掩码(即UIViewAutoresizingFlexibleLeftMargin),您将“取消选择” IB中的相应边距自动调整大小选项。 (我看过许多其他帖子,这些帖子在某些人看来似乎是一个主要困惑点)。

但是,在研究过程中,我确实注意到,当自动调整UIView的大小时,似乎没有任何类型的事件,消息,通知或其他方式。虽然不必调整subView的大小,但很高兴知道它的帧大小发生变化时,如果您希望使scrollView或tableView滚动的情况下何时发生。我知道当键盘弹出时可以很容易地做到这一点,因为周围有一个通知系统以及TextField delegate方法。所以也许是另一篇文章的主题...

无论如何,感谢所有参加StackOverflow的人!

关于UIView和AutoresizingMask被忽略,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3741566/

10-10 07:22