4

我在 Xcode 5.0.1 中有一个针对 iOS7 的项目。我正在使用 Storyboard 设计应用程序,并且正在使用 Autolayout。

当我构建和运行应用程序时,我正在使用 iOS 模拟器对其进行测试。我在 3.5" 和 4" 视网膜方案之间切换,以在不同的屏幕尺寸上查看应用程序。

在大多数情况下,一切正常,自动布局似乎工作得很好。但是,在一个屏幕上,布局存在问题,但仅限于以下情况:

  • 我在 iOS Simulator 下将方案设置为“iPhone Retina (4-inch)”
  • 在 Storyboard 上,外形尺寸设置为“Retina 3.5 英寸”

在这种情况下,自动布局似乎可以在任何地方工作,除了我使用更复杂的视图结构的地方:

视图布局不正确

但是,如果我只是将 Storyboard 上的外形尺寸更改为“Retina 4 英寸”,那么 Storyboard 上的一切看起来都很好,而且当它运行时,它看起来也很好。如果我将外形尺寸保留为“Retina 3.5 英寸”并将 iOS 模拟器更改为“iPhone Retina(3.5 英寸)”,情况也是如此:

景色看起来不错

所以,我的问题是:这是正确的行为吗?Storyboard 外形尺寸是否必须与您正在测试的设备相匹配?我想知道,因为这是 Storyboard 中唯一导致问题的视图,但是,切换外形尺寸会使一切正常运行,因此 Autolayout 似乎工作正常。

4

3 回答 3

2

我知道这个问题很老,但我刚刚经历并解决了同样的问题。

我的情况是这样的:

1) 我有一个 UITableView,受限于我的视图控制器框架的大小。2) 在 vi​​ewDidLoad 方法中,我添加了一个表头视图,使用我的表视图的框架作为表头的框架。

UIView *headerView = [UIView alloc]initWithFrame:self.tableView.frame];    
self.tableView.tableHeaderView = headerView;

这给了我一个隐藏表格视图上的内容的标题,直到标题被向上滑动(类似于雅虎天气)。

3)在标题的底部,我有几个标签显示向上滑动之前可见的信息。

问题:

如果我在 3.5" 模拟器上启动我的应用程序,但将情节提要设置为 4" 手机,标题视图底部的标签将呈现在屏幕底部下方,将它们切断。

如果我在 4" 模拟器上启动我的应用程序但将情节提要设置为 3.5",则标签在表格的标题视图中显得太高了。

如果我在与故事板设置相同大小的模拟器上启动该应用程序,则一切正常。

经过数小时的头撞后,我意识到在调用 viewDidLoad 时未使用自动布局约束设置我的表格视图的框架。那时它是从我的故事板中推断出大小,然后根据约束进行调整。结果,我的表​​格视图标题与预期的表格视图大小不同。

根据表格视图的大小将添加表格视图标题的代码移动到

viewDidLayoutSubviews 

方法,当应用自动布局约束时解决了这个问题。

于 2014-07-17T02:34:32.953 回答
1

不,Storyboard 外形是为了向您展示它在不同屏幕尺寸下的外观。它不规定运行时视图的大小。

我的猜测是,您的视图中必须存在一些未正确设置的约束,无法在该屏幕中使用 4" 屏幕。

于 2013-11-10T04:14:34.107 回答
0

我对 UIScrollView 有同样的问题。上面来自 user3847320 的答案可能是正确的。但就我而言,我在 viewDidLayoutSubviews 中进行布局时发生了崩溃。

为了快速避免这种情况,只需在 viewDidLoad 中添加以下内容:

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.scrollView.frame = self.view.frame;
}
于 2014-08-20T11:26:28.690 回答