IB中3.5外形的不同视图

时间:2013-07-21 10:49:19

标签: ios interface-builder

我正处于绝望之中。

我正在尝试在iOS中设计音频播放器。如果在视图的末尾有一个可以填充视图的动态内容的表,那么带有autolayout的Interface Builder非常有用,但在这种情况下(从上到下,简化):

  • 艺术品
  • title等。
  • 对照

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

显然,由于不同的原因,我无法让两个外形因素共存于同一个视图中:

  • 控件不会将自己附加到视图的底部,它们只是由于标题和艺术作品视图的耐用性以及各种约束而变得明显。设置内容压缩并不是绝对没有,就像它没有设置手动高度约束一样。

  • 我必须在4英寸处保留一个巨大的白色空间。这很令人作呕,我试图在那个空间放置一些只有4英寸的信息。然而问题没有解决,因为#1。

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

所以,我不是在靠墙上抨击并应用自动调整和约束,而是在下次移动时会擦除,我问我是否可以在界面构建器中为特定控制器提供不同的视图,仅用于因为我不能再拿它了3.5的外形。

1 个答案:

答案 0 :(得分:1)

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

simulated metrics


<强>更新

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

这实际上就是我的做法:

enter image description here

然后在.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 )