在iOS故事板中使用自动调整大小时如何保证UITableView的单元格不会偏向

时间:2013-07-25 16:20:44

标签: iphone ios ios6.0

我有一个行高33和高度363的表视图。当在iPhone 5上显示时,我添加的所有表格单元都没有被切断,它很好地结束并且ID很好。自动调整大小如下:

Autosizing on iPhone 5 screensize

现在的问题是,当我在3.5英寸iPhone 4屏幕上尝试这个时,最后一个表格单元被切断了一半,因为现在高度为275.我确实希望桌面视图缩小,但我希望高度保持不变33。

我可以想到两种可能的方法: 1)在故事板中将小桌面视图设置为正确的高度(例如297),那么有没有办法通过故事板设置自动调整大小?

2)以编程方式检测iPhone类型并调整代码。最安全的方法是什么?

1 个答案:

答案 0 :(得分:1)

您可以通过检测类似#2的iPhone类型在代码中执行此操作,或者如果使用布局约束,则可以在代码中添加单个约束,该约束将表视图的高度与屏幕的高度相关联。表格视图高度可以表示为屏幕高度乘以乘数加上常数,因此如果求解这两个等式,您将获得乘数和常数的值:

568 *乘数+常数= 363和480 *乘数+常数= 297

如果你解决这个问题,它会给你乘数= .75和常数= -63.0115

所以我使用的代码看起来像这样。我将fudge因子10添加到我计算的常量中,以便在表格视图中处理填充(我根据经验确定)。我在IB中创建了一个高度约束,并为它创建了一个IBOutlet - 它的值是什么并不重要,因为我立即在viewDidLoad中删除它(在IB中需要它,因此约束就足够了)。

- (void)viewDidLoad {
    [super viewDidLoad];
    self.tableView.dataSource = self;
    self.tableView.delegate = self;
    self.theData = @[@"One",@"Two",@"Three",@"Four",@"Five",@"Six",@"Seven",@"Eight",@"Nine",@"Ten",@"Eleven",@"Twelve"];
    [self.tableView reloadData];
    [self.tableView removeConstraint:self.tableHeight];
    [self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.tableView attribute:NSLayoutAttributeHeight relatedBy:0 toItem:self.view attribute:NSLayoutAttributeHeight multiplier:0.75 constant:-63.0115 + 10]];
}