ViewControllers 不为 3.5 英寸屏幕调整大小
Posted
技术标签:
【中文标题】ViewControllers 不为 3.5 英寸屏幕调整大小【英文标题】:ViewControllers not resizing for 3.5 inch screen 【发布时间】:2013-11-17 17:08:55 【问题描述】:我真的在为这个而苦苦挣扎。我搜索了这个问题,但似乎没有人遇到完全相同的问题。
所以我有这个 ios7 项目,它应该在 4 英寸和 3.5 英寸设备上运行。 在 4 英寸上,一切都很好,但在 3.5 英寸上,视图控制器的帧高度为 568
如果我在 AppDelegate 中记录 UIScreen 边界,它会正确返回 480。但是如果我创建 UIViewController 并将它作为 rootViewController 添加到 NavigationController,它的高度是 568。 (NavigationController 480 的高度太合适了)
首先,我认为可能是因为 XIB,所以我创建了空白 UIViewController 只是 [[UIViewController alloc] init],但它的高度仍然是 568。
这让我发疯了,因为我的其他项目以这种方式运行良好,并且视图控制器会自动调整大小。
我检查了我在 images.xcassets 中定义了正确的起始图像,并且我尝试了使用和不使用自动布局的 XIB。
只有一件事有帮助,如果我将 xib 中的模拟指标设置为 NONE 或 3.5 英寸,但我不会在 4 英寸上获得全屏。两个屏幕都有多个 xib 对我来说不是解决方案。
任何提示将不胜感激
谢谢
【问题讨论】:
如果您使用自动布局,请检查您是否设置了适当的约束以使视图根据屏幕大小自动调整大小,否则请检查您是否设置了正确的 autoResizingMask。 您好,感谢您的回答。当我以编程方式创建视图控制器时,我能够解决问题(我必须清除派生数据并清理产品),但现在我需要让 XIB 中的自动布局正常工作。我正在研究约束,但在我看来,我只能为子视图定义约束,但不能为主视图控制器的视图定义约束。如何根据屏幕设置自动调整大小的约束? 本指南将帮助您同时支持 ios 6 和 ios 7,developer.apple.com/library/ios/documentation/userexperience/… 同意,这个问题真让人生气。在有点类似的情况下,这节省了一天.. - (void)viewWillLayoutSubviews // 可怕的修复,使其在所有(大多数??很多??)设备上正确定位! self.scrollView.contentOffset = CGPointMake(self.scrollView.contentOffset.x, 0); 【参考方案1】:我目前在使用 autoLayouts 时遇到了这个问题,但现在我已经使用 nib 解决了这个问题。所以我想和你分享。
如果你正在通过 nib 制作 viewController。然后你应该确保“Resize View From NIB”被选中。完成此操作后,您将获得视图 w.r.t 屏幕边界的框架高度。 (在 3.5 英寸屏幕上为 480,在 4 英寸屏幕上为 568)。
【讨论】:
xib文档中视图的版本是多少?我的是“iOS 7 及更高版本”。我看不到这个选项。 我目前正在使用 xCode 5.1.1。我的项目是在 Storyboard 中。你是用故事板还是简单的xib??? 我的项目中没有使用故事板。我的问题是从自动布局故障继承而来的。我没有正确定义滚动视图内容的约束,这个问题正在通过约束关系传播到主控制器。另外因为我在代码中创建了我的主窗口(我需要在主窗口中对委托类进行参数化,这就是我不使用 xib 作为主窗口的原因)。主窗口应该这样设置: UIWindow* window = [[UIWindow alloc] init]; window.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;等【参考方案2】:这件事发生在我身上,只是反过来——应用程序在 4 英寸屏幕上运行,屏幕为 3.5 英寸。
诀窍在于您的启动图像。确保您的 R4 图像实际上是 4 英寸的,@2X 图像是 3.5 英寸的。
【讨论】:
与更大的设备完全相同。 LaunchImage 确定要显示的尺寸。这里有关于所有设备和图像/图标大小的 Apple 官方指南:developer.apple.com/library/ios/documentation/userexperience/…【参考方案3】:你在错误的时间得到尺寸。
初始化大小来自NIB,
所以你需要在-viewDidLayoutSubviews
中获得调整后的大小(-viewDidAppear
中的低版本)
【讨论】:
【参考方案4】:我遇到了类似的问题。原来我有一个嵌入的 segue,并且原始容器视图被硬编码为 568:
Here
我不确定这是否能解决您的问题,但需要注意一些事项。
【讨论】:
以上是关于ViewControllers 不为 3.5 英寸屏幕调整大小的主要内容,如果未能解决你的问题,请参考以下文章
调整 4/3.5 英寸屏幕的 UICollectionViewCells 大小
iOS Storyboard,布局在 4.0 英寸屏幕尺寸和 3.5 英寸屏幕尺寸之间笨拙地转换