将UIView的大小调整为高度或宽度为零时,弹簧和支柱将永久停止工作

时间:2010-08-06 14:14:25

标签: iphone uiview

我正在尝试解决Apple SDK中长期存在的错误,但如果没有大量代码,我无法看到如何实现它。

这是错误:

  1. 创建视图。
  2. 在其中放入另一个视图,原点为ANYTHING,除了(0,0)。
  3. 配置子视图以调整大小以填充
  4. ...然后,在运行时: 4.将超视图大小设置为零 5.将超视图设置回任何非零大小

    BANG!苹果公司的SDK变得混乱,重置了子视图的起源,失去了从下来说出的所有能力等等(似乎程序员“忘了”包含一个变量来记录弹簧/支柱大小在它变为0之前的状态)。

    我听说过这个bug在OS X中存在了5年左右,Apple仍然没有修复它。我想要的是某种方式(任何方式!)解决它,没有重新编写Apple的整个弹簧/ struts系统并正确实现它,没有bug。不幸的是,我甚至找不到以前有人给我看过的OS X bug的原始引用。

    编辑:

    ...我在屏幕底部有一个调整大小的“抽屉”,必须缩小到很小的高度。问题是子视图“坍塌”所有下降到原点0(以及其他东西)的下降(技术上:他们正在减少他们的原点。但是没有重新增加它。)

3 个答案:

答案 0 :(得分:1)

我找到的最佳解决方案是限制您的最小窗口大小,以便您的所有视图都不会达到零大小。

答案 1 :(得分:0)

编辑:一小时后,折叠行为又回来了,我没有触及源文件。我将使用源代码控制进行仔细检查,但我相信所有发生的事情是我将其他文件添加到视图层次结构的不同部分并重新构建。哎呀!

(以下是SEEMED工作,但现在再次以同样的方式失败)

嗯。所以,我在一个屏幕上有两个UIVC。重构,以便我只有一个使调整大小的bug消失。它似乎是UIVC布局代码中的一个错误。

NB:我认为这可能是一个问题,因为我知道Apple目前建议您只使用iPhone同时在屏幕上显示一个UIVC,即使这意味着您必须忽略其复杂应用的MVC架构。所以,从技术上讲,他们会警告你远离这个。但是,与此同时,我现在无法将MVC内容用于此代码。

以下工作(对于我目前的例子 - 可能不是通用的!)。

HOW:

  1. 如果你要添加任何UITableViewController实例......放弃。您必须自己重新实施该课程
  2. 查找UIVC实例中的子视图,并将UIVC标头中的扩展类从“UIViewController”更改为“NSObject”
  3. 将所有代码从viewDidLoad移至init(记住“init”有关于前几行的特殊规则等)
  4. 用普通的“[[vc alloc] init]”替换“[[vc alloc] initWithNibName:nil bundle:nil]”中该UIVC的实例化

答案 2 :(得分:0)

另一种潜在的解决方法(在我目前的情况下有效):

我现在唯一拥有非零原点的视图,必须调整大小是一个UITableView。

Apple有一项特殊功能,可让您将任何视图作为“表格标题”。

所以...我已经把我所有的其他组件,将它们放在一个大视图中,并将其作为表头视图。

缺点是,当你滚动表时,它们现在滚动到顶部,但是它允许我将表格归零,解决SDK错误。