首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >忽略UIView和AutoresizingMask

忽略UIView和AutoresizingMask
EN

Stack Overflow用户
提问于 2010-09-18 19:44:18
回答 1查看 11.2K关注 0票数 8

第一次在堆栈溢出时发送。

我花了几个小时浏览了很多谷歌搜索,现在,我几乎已经记住了UIView和UIViewController的类参考文档。无论我做什么,我的应用程序都忽略了我在方向改变时调整视图大小的努力(或任何其他框架大小的修改)。

这里不涉及任何nib或xib;我正在以编程方式构建我所有的视图和视图控制器,它们(视图控制器)都是我创建的三个自定义UIViewController子类中的一个的子类。这些超类的loadView中有以下几行:

代码语言:javascript
复制
[self setView:[[[UIView alloc] initWithFrame:[self viewFrame]] autorelease]];
[[self view] setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)];
[[self view] setAutoresizesSubviews:TRUE];

在所有适当的setter方法中(换句话说,我在任何地方添加subView ),我都在重复应用autoresizingMask的步骤。似乎无论我做什么,结果都是一样的--我单击build,单击debug,等待应用程序启动,旋转设备,然后即刻完成!视图会旋转,但根本不会调整大小。

这里我漏掉了什么?这可能是一些明显的东西,我只是没有看到。任何帮助都是非常感谢的,提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-09-19 18:47:38

嗯,果然,这是我自己的错。

第一课:你通宵尝试修复损坏的代码并没有给自己带来任何好处。休息一下吧!多喝水!如果你一直试图强迫你的大脑在睡前执行复杂的算法策略和逻辑,你只会让事情变得更糟。

原来,我在视图层次结构的底部有一个流氓UIView,它根本没有设置自动调整大小属性。我以为我已经把所有的东西都看过了,但结果我漏掉了一个。(只有一个小小的视图,和一整天的拍摄!)

对于后来遇到类似挫折的任何人,我可以说,Autoresizing确实可以像文档中描述的那样工作。如果你认为“有些东西没有被调用”,那么你可能找错了地方。此外,UIViewAutoresizingMask枚举常量的使用方式与它们在接口生成器中的使用方式不完全相同。在IB中,您“锁定”页边距,而在以编程方式设置它们时,默认假定锁定的页边距,并通过将其设置为“灵活”来“解锁”它们。因此,例如,仅设置FlexibleWidth和FlexibleHeight位相当于启用IB中的所有自动调整大小选项。通过抛出任何边距掩码(即UIViewAutoresizingFlexibleLeftMargin),您将在IB中“取消选择”相应的边距自动调整大小选项。(我看过很多其他的帖子,这对一些人来说似乎是一个主要的困惑点。)

然而,在我的研究中,我确实注意到,当UIView被调整大小时,似乎没有任何类型的事件、消息、通知或其他东西,无论是自动的还是非自动的。虽然不需要调整subViews的大小,但如果您希望在scrollView或tableView的框架大小发生变化时使其滚动,那么当它发生变化时,这将是一件很好的事情。我知道当键盘弹出时,可以很容易地做到这一点,因为周围有一个通知系统以及TextField delegate方法。所以也许可以作为另一篇文章的主题。

不管怎样,感谢所有在StackOverflow上参与的人!

票数 34
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3741566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档