如何在与4英寸iPhone兼容的界面生成器中创build一个可用视图

如何在兼容4英寸的iPhone5和旧的iPhone 4 / 4s的界面生成器中制作一个可用视图?

Xcode 4.5中有三个选项:

  • 自由forms
  • 视网膜3.5全屏
  • 视网膜4全屏

如果我select了Retina 4,那么在3.5英寸的手机中,它会越过/溢出屏幕边界

使用代码,我可以相应地设置框架,但是使用界面构build器有什么用处?

应该如何使用Interface Builder来做到这一点?

编辑

我的问题是iphone 5视网膜4英寸的屏幕。 当检查具有状态栏和导航栏的视图的大小时,这里是self.view.frame.size.height / width的值,在我selectfreeform / none / retina 3.5的情况下frame 320.000000 x 416.000000

自动调整选项设置为使视图在所有方向上都展开,即所有支柱和弹簧都被启用。

编辑在iOS6模拟器中testing,如果我在代码中设置以下内容

self.tableView.frame = CGRectMake(0, 0, 320, 546); self.tableView.bounds = CGRectMake(0, 0, 320, 546); self.view.frame = CGRectMake(0, 0, 320, 546); self.view.bounds = CGRectMake(0, 0, 320, 546); NSLog(@"%2f - %2f", self.view.bounds.size.width, self.view.bounds.size.height); NSLog(@"%2f - %2f", self.tableView.bounds.size.width, self.tableView.bounds.size.height); 

我得到以下输出

  320.000000 - 546.000000 320.000000 - 546.000000 

并且从顶部的480像素以下的所有行都是不可select的,因为“视图”仍然认为它们是超出界限的。

我的解决scheme

将所有屏幕的大小设置为Retina 4,即使是主窗口xib文件。 在这之后,即使在iphone 4上,它也能正常工作。 并且所有低于480px的行现在可以在iOS 6模拟器中点击

如果在应用程序中显示动作表,请注意将size属性设置为“Retina 4 Full Screen”。 此解决scheme实际上将主窗口的尺寸设置为iPhone 5的尺寸。在我的情况下,当您尝试显示操作表时,在iPhone 4中设置此受影响的显示,因为它将尝试从可见屏幕下方显示。

适用于所有情况的正确解决scheme是将大小设置为无,并检测应用程序委托didfinish加载方法中的屏幕大小,并将主窗口设置为该大小或将rootviewcontroller的视图设置为该大小。 工作表将会正常工作。

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window.frame = CGRectMake(0, 0, [[UIScreen mainScreen]bounds].size.width, [[UIScreen mainScreen]bounds].size.height); } 

select您的xib文件并更改Size属性。

在这里输入图像说明

从我明白你想创build一个表格视图,可以适用于iPhone 4和5.首先,我havnt试过Xcode 4.5,但代码

  CGRect fullScreenRect = [[UIScreen mainScreen] bounds]; theTableView.frame = CGRectmake = (0,0,fullScreenRect.width,fullScreenRect.height); 

fullScreenRect将返回当前设备的边界是否3.5或5英寸。 你可以dynamic设置高度和宽度。

让我知道如果它的工作..

干杯

w ^

在界面生成器中从“自由forms”,“视网膜3.5”或“视网膜4”select的设置在右侧面板的“ 模拟量度”部分(注意添加的重点)

这意味着它们仅用于向您展示在这些维度上显示时视图的外观。 通常情况下,您可以在devise时使用这个来了解您需要布置视图的空间。 但是UIViewController的UIView总是在屏幕上显示的时候resize。

例如,如果您知道顶部有一个状态栏和一个NavigationBar,底部有一个TabBar,则在屏幕上组织剩余视图的空间较less,因此在“模拟度量标准”部分中select这些视图的面板将帮助您查看视图中的空间,并避免在元素y = 460处放置元素,这些元素在运行时会因为这些NavBar和TabBar而离开屏幕。

但最后,UIViewController将调整其视图的大小,以便占用最大空间,根据AutoresizingMask属性(可在IB的“大小检查器”窗格中configuration的struts和弹簧)移动子视图。

总之,你唯一需要做的是:

  • build议您select“视网膜3.5”模拟指标,以便在界面构build器中查看显示此视图时可能具有的最小尺寸(帮助您避免将视图和控件放置在只能在4 “屏幕,但不在3.5”屏幕上,并铭记最小的共同区域来确定你的视野)
  • 正确configuration你的AutoResizing Masks(如果你打算只为iOS6而不是iOS4或iOS5发布你的应用程序,请使用AutoLayout和约束),这样当屏幕更高时(Retina 4“),我的视图将被正确地重新排列。

如果您的界面正在使用Storyboard:

打开*。“文本编辑器”

并走到底部find<simulatedScreenMetrics key="destination" type="retina4"/>

delete type="retina4"

那么它的默认大小是3.5“