xcode 屏幕大小是固定的 - 每个设备都不会改变
Posted
技术标签:
【中文标题】xcode 屏幕大小是固定的 - 每个设备都不会改变【英文标题】:xcode screen size is fixed - not changing per device 【发布时间】:2014-01-05 14:31:48 【问题描述】:我正在尝试为要显示的 4 英寸屏幕设置情节提要。 我创建了 2 个故事板,名称命名并将代码放在
appdelegate.m
但无论我使用什么模拟器,我每次都获得相同的屏幕尺寸 (480)。 我已经尝试了我在 *** 上找到的所有代码,例如:
CGSize screenSize = [[UIScreen mainScreen] bounds].size;
并从中获取高度。
我也尝试了其他方法,但仍然获得相同的屏幕尺寸 - 每次都是 480。
在其他项目中它工作得很好。
这是一个错误吗?我应该在项目设置中更改一些内容吗?
我正在为 Xcode 5 上的 ios 7 及更高版本进行开发。
如果您知道该怎么做,请提供帮助..
【问题讨论】:
你在appdelegate.m
中输入了什么代码?
使用单情节提要,并使用自动布局功能,(3.5 和 4" 屏幕)都很舒服
if (screenSize.height == 480) UIStoryboard *iPhone4Storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; UIViewController *initialViewController = [iPhone4Storyboard instantiateInitialViewController]; self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; self.window.rootViewController = 初始视图控制器; [self.window makeKeyAndVisible];
else - 使用 main4 英寸故事板
@AsafR :看我的回答...希望这就是您要找的...
【参考方案1】:
谢谢大家。 经过数小时的挫败尝试,我可以挖掘出的每一行代码,我发现 xcode 有错误......而且它确实是 Xcode 中的一个错误。
我打开了一个新项目,复制了所有文件/类/故事板,它可以正常工作! 我想这是模拟器中的某种错误(关闭它并重新打开没有帮助,关闭 Mac 并重新启动也没有帮助......)
【讨论】:
【参考方案2】:在prefix.pch下面使用。
#define iPhone4Or5 ([[UIScreen mainScreen] bounds].size.height == 568 ? 5 : ([[UIScreen mainScreen] bounds].size.height == 480 ? 4 : 999))
返回如下
iPhone4Or5 = 4 (iPhone 4)
iPhone4Or5 = 5 (iPhone 4)
iPhone4Or5 = 999 (iPad)
现在你可以使用
UIStoryboard *storyBoard;
if (iPhone4Or5==4)
storyBoard = [UIStoryboard storyboardWithName:@"Main_4s" bundle:nil];
else if (iPhone4Or5==5)
storyBoard = [UIStoryboard storyboardWithName:@"Main_5s" bundle:nil];
else
storyBoard = [UIStoryboard storyboardWithName:@"Main_iPad" bundle:nil];
UIViewController *initViewController = [storyBoard instantiateInitialViewController];
[self.window setRootViewController:initViewController];
我才知道为什么会这样。
选择 4s 故事板并转到编辑器 >> 应用 Retina 3.5 英寸因子(如果您看到应用视网膜 4 英寸,请不要单击该选项)
对于 4s 你应该看到 Editor >> Apply Retina 4-Inch
【讨论】:
感谢您的回答。它适用于所有其他项目。不要买现在的。即使这样,我总是得到屏幕尺寸高度 = 480。可能是 xcode 中的某种错误? 问题出在模拟器上,一旦我创建了一个新项目并将文件复制到其中,一切都很好。我拿走了你的代码并使用了它,谢谢! @AsafR :欢迎...我的代码很好,我到处都在使用它...确保将 iPad 保持为 999,因为 Apple 可能会有不同高度的新 iPhone,我们可以使用新的iphone 7 ;)【参考方案3】:我的建议是创建一个支持两个屏幕的故事板。
在下图中表示您是否使用下图中的按钮在视网膜 4 英寸和 3.5 英寸之间切换。使用右上角大小检查器下的自动调整大小工具来让视图正确定位。
how-to-update-your-apps-for-the-4-inch-iphone-5-display
请记住,自动布局仅支持 6.0 及更高版本。
所以如果你没有使用自动布局尝试自动调整大小
【讨论】:
【参考方案4】:#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
#define IS_IPHONE_5 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 568.0f)
#define IS_RETINA ([[UIScreen mainScreen] scale] == 2.0f)
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
CGSize deviceResult = [[UIScreen mainScreen] bounds].size;
if(deviceResult.height == 480)
// iPhone Classic
if(deviceResult.height == 568)
// iPhone 5
【讨论】:
【参考方案5】:对于 Swifter,这是我能够找到的并且我已经对其进行了测试。如果这不起作用,请告诉我。
import UIKit
import CoreData
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate
var window: UIWindow?
var iOSDevice: CGSize!
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool
// Override point for customization after application launch.
iOSDevice = UIScreen.mainScreen().bounds.size
if iOSDevice.height == 480
println("iPhone4")
var MainStoryboard: UIStoryboard
MainStoryboard = UIStoryboard(name: "iPhone4", bundle: nil)
var initialViewController: UIViewController!
initialViewController = MainStoryboard.instantiateInitialViewController() as! UIViewController
self.window!.makeKeyAndVisible()
self.window?.rootViewController = initialViewController
else
if iOSDevice.height == 568
println("iPhone5")
var MainStoryboard: UIStoryboard
MainStoryboard = UIStoryboard(name: "iPhone5", bundle: nil)
var initialViewController: UIViewController!
initialViewController = MainStoryboard.instantiateInitialViewController() as! UIViewController
self.window!.makeKeyAndVisible()
self.window?.rootViewController = initialViewController
else
if iOSDevice.height == 667
println("iPhone6")
var MainStoryboard: UIStoryboard
MainStoryboard = UIStoryboard(name: "iPhone6", bundle: nil)
var initialViewController: UIViewController!
initialViewController = MainStoryboard.instantiateInitialViewController() as! UIViewController
self.window!.makeKeyAndVisible()
self.window?.rootViewController = initialViewController
else
if iOSDevice.height == 736
println("iPhone6Plus")
var MainStoryboard: UIStoryboard
MainStoryboard = UIStoryboard(name: "iPhone6Plus", bundle: nil)
var initialViewController: UIViewController!
initialViewController = MainStoryboard.instantiateInitialViewController() as! UIViewController
self.window!.makeKeyAndVisible()
self.window?.rootViewController = initialViewController
return true
【讨论】:
以上是关于xcode 屏幕大小是固定的 - 每个设备都不会改变的主要内容,如果未能解决你的问题,请参考以下文章