2015-09-02 47 views
0

我有一个UIScrollView在wAny/hAny用户界面,我将它的所有空间设置为其超视图,导致标准大小600x600。Obj-C controller.view.frame获取实际大小

因为这是具有多个页面的应用程序,我需要做一些数学为滑动到下一个页面(水平),而且是一个代码块,我使用这会导致空格在页面之间:

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即将推出的分屏模式,这会导致意想不到的行为。

那么还有什么我可以用来获得框架的实际大小?

+0

你用什么方法获得视图的大小?系统不会在布局通过之前设置大小,这发生在'viewDidLoad'和'viewWillAppear:'之后。 –

+0

哦,这是有道理的。在我看来,我做到了这一点,当然它不能真正“知道”现在的价值。那么你会推荐我把它放在viewDidAppear中吗?编辑:好吧,刚刚做了,现在启动应用程序后有一个小小的延迟,会看到我能做些什么,但我会确定这一点。作为答案,我会打勾 – user2875404

+0

如果你想在你的视图控制器中做到这一点,在'viewDidLayoutSubviews'中执行。 –

回答

2

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

+0

非常感谢,我现在运行了2次以上的代码,起初我通过viewWillAppear中的算法得到了我的第一个viewController,然后在viewDidAppear中将它应用于所有视图。 – user2875404

相关问题