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 屏幕大小是固定的 - 每个设备都不会改变的主要内容,如果未能解决你的问题,请参考以下文章

在设备上运行时屏幕不会出现填充屏幕

pc端jquery项目开发总结

Xcode - 查看屏幕大小

Xcode:将不同高度的 UILabel 限制为固定大小的容器

根据Android中的屏幕尺寸动态添加视图[关闭]

Xcode Using Auto Layout 不会为每个 iphone 型号优化屏幕 [关闭]