Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Obj-C controller.view.frame获取实际大小_Ios_Objective C_Uiscrollview - Fatal编程技术网

Ios Obj-C controller.view.frame获取实际大小

Ios Obj-C controller.view.frame获取实际大小,ios,objective-c,uiscrollview,Ios,Objective C,Uiscrollview,我在wAny/hAny UI中有一个UIScrollView,我将它的所有空格设置为其superview,从而使标准大小为600x600 因为这是一个有多个页面的应用程序,所以我需要做一些数学运算来切换到下一个页面(水平),并且我正在使用的一段代码会导致页面之间出现空白: CGRect frame = self.scrollView.frame; frame.origin.x = frame.size.width * pageNumber; frame.origin.y = 0;

我在wAny/hAny UI中有一个
UIScrollView
,我将它的所有空格设置为其superview,从而使标准大小为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加上屏幕宽度),那么一切都可以完美运行,但这肯定不是最好的方式

我也可以在UIScrollView完全填满屏幕时获得屏幕宽度,因此会得到相同的值,但我觉得这不是好代码。虽然这对于我的应用程序来说已经足够了,但我真的很想知道如何在Objective-C中正确地实现这一点。此外,对于即将在iOS 9上出现的分屏模式,这将导致意外行为


那么,我还可以使用什么来获取帧的实际大小呢?

视图中将显示:
,因为在该方法返回之前,系统不会布局视图。在视图控制器中,最早可以获得正确的视图大小的是
viewdilayoutsubviews

,您尝试用什么方法获得视图的大小?在布局通过之前,系统不会设置大小,这发生在
viewDidLoad
viewwill出现之后:
。哦,伙计,这是有道理的。我在我的视图中这样做了,它当然不能真正“知道”此时的值。那么你会建议我把它放在视图中吗?编辑:好的,刚刚做了,在现在启动应用程序后出现了一个小的延迟,我会看看我能做些什么,但我会确定这一点。作为答案,我将勾选如果您想在视图控制器中执行此操作,请在
viewDidLayoutSubviews
中执行。非常感谢,我现在运行上述代码2次,首先我通过ViewWillDisplay中的该算法获得我的第一个viewController,然后我将其应用于ViewDidDisplay中的所有视图。