ios - Obj-C controller.view.frame 获得真实大小

标签 ios objective-c uiscrollview

我在 wAny/hAny UI 中有一个 UIScrollView,我将它的所有空间设置为其 super View ,从而得到 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 而不是 View 的实际大小,导致 View 之间出现上述间隙。如果我将 frame.origin.x 硬编码为 pageNumber*414(iPhone 6 Plus 屏幕宽度)一切正常,但这肯定不是最好的方法。

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

那么我还能用什么来获取框架的实际大小呢?

最佳答案

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

关于ios - Obj-C controller.view.frame 获得真实大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32363091/

相关文章:

iphone - 如何在 iOS 中为应用程序图标制作动画?

objective-c - iOS批量下载多个文件

objective-c - KVO : how to call setValue. .. 在 setValue 内并且不会进入无限循环?

ios - 如何让ScrollView半透明且背后内容交互?

ios - 如何在开发环境中测试 Smart App Banner Urls

ios - 如何拍摄模糊的照片(例如从 iPad 2 拍摄的照片)并使用 iOS API 对其进行锐化?

objective-c - 在从 .xib 创建的 UIViewController 中添加一个 ContainerView

ios - UICollectionView contentOffset 在键盘出现时发生变化

ios - UIScrollView 在键盘关闭时停止滚动

ios - 当应用程序被终止(非事件)时,点击 Firebase 通知不起作用