Obj-C controller.view.frame获得REAL大小

时间:2015-09-02 21:05:44

标签: ios objective-c uiscrollview

我在wAny / hAny UI中有一个UIScrollView,我将它的所有空格都设置为超级视图,结果标准尺寸为600x600。

因为这是一个有多个页面的应用程序,我需要做一些数学操作才能刷到下一页(水平),并且我正在使用的一个代码块导致页面之间出现空格:

CGRect frame = self.scrollView.frame;
    frame.origin.x = frame.size.width * pageNumber;
    frame.origin.y = 0;
    controller.view.frame = frame;
    [self.scrollView addSubview:controller.view];

这里的问题是frame.size.width总是返回600而不是视图的实际大小,导致视图之间的间隙。如果我将frame.origin.x硬编码为pageNumber*414(iPhone 6 Plus屏幕宽度),一切都很完美,但这肯定不是最好的方法。

我也可以获得屏幕宽度,因为UIScrollView完全填充它,因此会产生相同的值,但我觉得这不是好的代码。虽然这对我的应用程序来说肯定是足够的,但我真的想学习如何在Objective-C中正确完成。此外,关于iOS 9即将推出的分屏模式,这将导致意外行为。

那么我还能用什么来获得框架的实际尺寸?

1 个答案:

答案 0 :(得分:2)

您无法在viewWillAppear:中找到视图大小,因为系统在该方法返回之前不会布置视图。您最早可以在视图控制器中获得正确的视图大小viewDidLayoutSubviews