Obj-C controller.view.frame 获取真实大小
Obj-C controller.view.frame get REAL size
我在 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
总是 returns 600 而不是视图的实际大小,导致视图之间出现上述间隙。如果我将 frame.origin.x 硬编码为 pageNumber*414
(iPhone 6 Plus 屏幕宽度)一切正常,但这肯定不是最好的方法。
我也可以只获取屏幕宽度,因为 UIScrollView 完全填充它,因此会产生相同的值,但我觉得这不是好的代码。虽然这对我的应用程序来说绝对足够了,但我真的很想了解如何在 Objective-C 中正确完成此操作。此外,关于 iOS 9 即将推出的分屏模式,这会导致意外行为。
那么我还能用什么来获取框架的实际大小呢?
您无法在 viewWillAppear:
中找到视图大小,因为系统在该方法 returns 之后才对视图进行布局。最早可以在视图控制器中获得正确的视图大小是在 viewDidLayoutSubviews
.
我在 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
总是 returns 600 而不是视图的实际大小,导致视图之间出现上述间隙。如果我将 frame.origin.x 硬编码为 pageNumber*414
(iPhone 6 Plus 屏幕宽度)一切正常,但这肯定不是最好的方法。
我也可以只获取屏幕宽度,因为 UIScrollView 完全填充它,因此会产生相同的值,但我觉得这不是好的代码。虽然这对我的应用程序来说绝对足够了,但我真的很想了解如何在 Objective-C 中正确完成此操作。此外,关于 iOS 9 即将推出的分屏模式,这会导致意外行为。
那么我还能用什么来获取框架的实际大小呢?
您无法在 viewWillAppear:
中找到视图大小,因为系统在该方法 returns 之后才对视图进行布局。最早可以在视图控制器中获得正确的视图大小是在 viewDidLayoutSubviews
.