0

我正处于绝望的边缘。

我正在尝试在 iOS 中设计一个音频播放器。如果在视图的末尾有一个可以填充视图的带有动态内容的表格,则具有自动布局的界面生成器非常有用,但在这种情况下(从上到下,简化):

  • 艺术品
  • 标题等
  • 控制

我在 IB 中为 Retina 4 英寸因子设计。应用 Retina 3.5 英寸因子,这是一个无法修复的混乱。

显然,由于不同的原因,我不能让这两种形式因素在同一个视图中共存:

  • 控件不会将自己附加到视图的底部,它们只是简单地显示出来,可能是由于标题和艺术品视图的耐用性以及各种约束。设置内容压缩并不是什么都不做,就像手动设置高度约束一样。

  • 我必须在 4 英寸上保留一个巨大的空白区域。这很恶心,我试图在那个空间中放置一些其他信息,这些信息只有 4 英寸才能看到。但是问题没有解决,因为#1。

  • 在某些时候,我有一些工作,但它非常低于标准,即使因为艺术品必须调整大小等。

因此,与其将我的头撞在墙上并应用下次移动某些东西时将被擦除的自动调整大小和约束,我问我是否可以在界面构建器中为特定控制器提供不同的视图,仅适用于 3.5 形式因素,因为我不能再忍受了。

4

1 回答 1

1

是的,您可以,只需单击所有这些东西(艺术品等)的父视图,然后在检查器窗格中将模拟指标更改为 iPhone 3.5 英寸。见截图。

模拟指标


更新

如果您想保留完全不相关的版本,那么最简单的方法是复制 .xib 文件并为其添加扩展名。例如,在 iPhone 5 版本中添加“-568h”。然后您必须在initWithNibName:方法中加载相应的 .xib 文件。

这实际上是我的做法:

在此处输入图像描述

然后在 .m 文件中:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
nibNameOrNil = IS_IPAD ? @"MainView~ipad" : IS_WIDESCREEN ? @"MainView-568h" : @"MainView";
.  
.  
.  
.  
}

我使用的宏:

#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#define IS_WIDESCREEN ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )568 ) < DBL_EPSILON )
于 2013-07-21T11:05:02.827 回答