Autoresize不能在xib中工作

我在.xib做了简单的devise,我的应用程序的部署目标是iOS 5我的视图不会resize,当我在模拟器或设备中运行我的应用程序。

这里是我的.xib文件的快照。

当我尝试在模拟器中运行我的应用程序,它在4“模拟器中正常运行,但它不会resize,当我在3.5模拟器中运行我的应用程序”。 Autoresize子视图属性被选中。

这里是我的Simulaotrs快照,第一个截图是3.5“和第二个4”..

提前致谢。

如果要自动resize并自动排列参考上方视图的图标,请尝试使用布局选项卡进行播放
布局

或为每个布局创build自己的.xib;)

你可以使用你的.xib文件中的下一个设置(416 = 480 – 20(状态栏的宽度) – 44(导航栏的宽度) 在这里输入图像说明

416 = 480  -  20(状态栏的宽度) -  44(导航栏的宽度)

如果你想在iPhone 5的顶部的图标使用下一个设置的图标: 在这里输入图像说明在这里输入图像说明

如果你想在iPhone 5底部的图标使用下一个设置的图标: 在这里输入图像说明在这里输入图像说明

检查是否在.xib文件中取消选中Autolayout选项 在这里输入图像说明

我有一个类似的效果,我想用一个button的网格来实现。 我想你会发现iOS 5支持的自动调整function根本就不行。 最后,我有两个故事板,一个用于iOS 6设备,另一个用于iOS 5.我的App Delegate然后检查主视图是否响应UIView的constraints方法(告诉你它是否支持新的iOS 6约束 -并且加载了相关的Storyboard。

像这样在你的- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法:

 if (![self.window.rootViewController.view respondsToSelector:@selector(constraints)]) { UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_BC_iPhone" bundle:nil]; UITabBarController *rootController = [storyboard instantiateInitialViewController]; [self.window setRootViewController:rootController]; } 

iOS 6 Storyboard是默认加载的,但是如果需要的话,可以使用向后兼容的版本来覆盖它。 仅向3.5英寸显示器手动设置向后兼容的Storyboard,因为iPhone 5最低只能运行iOS 6,因此向后兼容的Storyboard不需要在4“显示器上运行。

设置向后兼容的Storyboard并不需要很长时间 – 只需复制使用约束的iOS 6,然后将其设置为3.5“显示,closures约束并修复视图。

另一种方法是基于屏幕尺寸以编程方式布置图标。 这样做的好处是你可以devise它来适应任何屏幕尺寸,但是缺点是这可能会花费更多的精力。

[编辑]注意到你使用.xib而不是Storyboards,但是理论是一样的。 检查UIView是否响应constraints然后相应地加载适当的NIB(.xib)文件。

解决scheme非常简单。
在你的超级视图中添加UIVIew,然后将所有图标添加到它们(注意从导航控制器到标签栏的视图大小)
在这里输入图像说明

这个子视图(有你的图标)应该有这些自动调整的口罩 在这里输入图像说明

  • 而你的图标应该有相同的自动识别口罩。

你可以从Ray WenderLich的例子中得到参考。 非常简单的autoLayout的解释与它的例子。它会描述你所犯的每一行错误。如果你已经启用Autolayout约束必须显示在左侧,而select视图。

正如我所看到的,根据您的布局设置以及解决方法,您有几个选项。

如果您使用的是Autolayout,那么对您的元素会有Contraints,即使您使用resize,也可能无法在视图中显示所有元素。 他们只是不适合。 所以在这种情况下,我build议你使用480分辨率的滚动视图来使你的视图能够被显示。

autolayout禁用

在您的.h文件中,为您的视图制作一个IBOutlet:

 @property (strong, nonatomic) IBOutlet UIView *contentView; 

在你的.m文件中,像这样设置。

 //Add scrollview UIScrollView *scrollView=(UIScrollView *)self.view; scrollView.contentSize=self.contentView.frame.size; [self.view addSubview:self.contentView]; 

另一个解决方法是让你可以用不同的间距将你的元素放在任何你喜欢的地方,这样做就是创build两个不同的.xib文件,并在你的ViewController中设置它。

 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { if([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone){ if([UIScreen mainScreen].bounds.size.height == 568.0) { //Use iPhone5 VC self = [super initWithNibName:@"RootViewController-568h" bundle:nibBundleOrNil]; } else{ //Use Default VC self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; } } return self; } 

这是如果你打电话给你的ViewController的RootViewController ,这样你就很安全,如果他们决定扩大未来iPhone5s或iPhone6的屏幕尺寸。 它不会看起来不错,但至less它不会崩溃的应用程序。