我已经阅读了一些关于使用AutoLayout的教程,但我似乎无法弄清楚如何实现我觉得应该非常简单的东西.我正在为3.5英寸和4英寸iPhone / iPod Touch屏幕设计应用程序.这是一个简单的标签栏应用程序,其中UITableView填满了每个标签的全部内容,如下所示:
无论屏幕是3.5英寸还是4英寸,我都希望UITableView锁定到屏幕的边缘.我目前在4英寸屏幕上的工作正常,但在3.5版本中,UITableView超出了屏幕的宽度.
我已经尝试阅读一些AutoLayout教程以及摆弄Interface Builder约束,但没有成功.我很感激您提供的任何帮助.
解决方法
您需要将UITableView附加到父UIView的所有边缘,然后UITableView将展开或缩小以填充设备上的UIView.这将使其在所有iDevices(包括iPad)上看起来都是合适的尺寸.如下面的屏幕截图所示,您可以点击所有虚线红色指南,确保边距设置为0(触摸两侧):
您还可以向左拖动,向右拖动,向上拖动,然后在UITableView上向下拖动,选择“前导空间到容器”,“将空间拖到容器”,“顶部空间到顶部布局指南”和“底部空间到底部布局” “ 分别.
或者,您可以使用Visual Format Language (VFL)(下面的UIViewController的代码假定您的UITableView是一个自动@ @合成的@property命名的tableView):
/* Turn off springs/structs */ self.tableView.translatesAutoresizingMaskIntoConstraints = NO; /* Leading and trailing constraints */ [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_tableView]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_tableView)]]; /* Top and bottom constraints */ [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_tableView]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_tableView)]];
…或者如果你真的想要明确(并且喜欢打字):
/* Leading constaint (could use NSLayoutAttributeLeft here as well) */ [self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.tableView attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeading multiplier:1 constant:0]]; /* Trailing constraint (could use NSLayoutAttributeRight here as well) */ [self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.tableView attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTrailing multiplier:1 constant:0]]; /* Top constraint */ [self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.tableView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1 constant:0]]; /* Bottom constraint */ [self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.tableView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeBottom multiplier:1 constant:0]];
所有这一切的重要之处在于UITableView是UIViewController视图的子代(很可能是).默认情况下,视图将按预期填充屏幕,并且使用上述所有方法,您要求布局紧贴最大化视图的边缘.