【问题标题】:UIScrollView bounds have not yet resized in "viewDidLoad"UIScrollView 边界尚未在“viewDidLoad”中调整大小
【发布时间】:2011-05-08 05:29:40
【问题描述】:

我有一个 UIViewController 子类,它的视图在 NIB 文件中配置。该视图有一个 UIScrollView 子视图。

UIScrollView 几乎占据了它的整个 NIB 文件,但它的超级视图作为子视图添加到一个小得多的视图(配置在不同的 NIB 中)——例如UIScrollView 是它自己的 NIB 高度的 80%,但最终只有应用程序窗口高度的 10%。

当我在 viewController 的 viewDidLoad 方法中调用 [scrollView bounds].size.height 时,我得到了 scrollView 相对于它自己的 NIB 的高度,而不是它最终调整为由其超级视图指定的高度(例如 80窗口高度的 % 而不是 10%)。

如果我稍后调用 [scrollView bounds].size.height(例如处理旋转事件),我会得到正确的值。

最初我如何才能获得正确调整大小的值?

【问题讨论】:

    标签: objective-c cocoa-touch ipad uiscrollview


    【解决方案1】:

    假设我正在关注,在加载视图控制器后一定有某个时间点可以抓取 .view 并将其插入到另一个子视图中?如果是这样,那么边界将被调整。您无法在 viewDidLoad 中获取它们,因为视图无法知道您将来会如何处理它。即使您将其作为子视图插入的调用是您在加载视图控制器后做的第一件事,它也是视图访问器将导致视图加载,从而导致 viewDidLoad,这一切都在您实际将视图放置在任何地方之前.

    由于 bounds 有一个 getter 和一个 setter,它应该是键值编码兼容的,在这种情况下,您可以使用 viewDidLoad 在 bounds 上注册一个观察者,并在 bounds 更改时执行您需要做的任何事情。

    【讨论】:

      【解决方案2】:

      您是否尝试过在viewWillAppear:viewDidAppear 处理它?

      【讨论】:

      • 使用“viewDidAppear”有效。在“主”视图控制器中,我分配并启动“滚动”视图控制器(其 NIB 包括 UIScrollView)。添加滚动视图控制器的视图作为主视图控制器视图的子视图后,我在滚动视图控制器上调用 viewDidAppear 并在那里处理边界检索。谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多