gpt4 book ai didi

UIView 和 AutoresizingMask 被忽略

转载 作者:行者123 更新时间:2023-12-02 06:41:50 24 4
gpt4 key购买 nike

第一次在堆栈溢出问题上发帖。

我花了几个小时搜索了许多 Google 搜索,此时,我几乎记住了 UIView 和 UIViewController 类引用文档。无论我做什么,我的应用程序都会忽略我调整方向变化 View 大小的努力(或与此相关的任何其他框架大小修改)。

不涉及 nib 或 xib;我正在以编程方式构建所有 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 旋转但根本不调整大小。

我在这里缺少什么?这可能是我没有看到的显而易见的事情。非常感谢任何帮助,提前致谢。

最佳答案

嗯,果然是我自己的错。

第一课: 熬夜尝试修复损坏的代码对自己没有任何好处。休息一下!多喝水!如果你在睡前继续强制你的大脑执行复杂的算法策略和逻辑,你可能只会让事情变得更糟。

事实证明,我在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com