0

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

在 iPhone 5 屏幕上自动调整大小

现在的问题是,当我在 3.5 英寸 iPhone 4 屏幕上尝试这个时,最后一个表格单元格被截掉一半,因为高度现在是 275。我确实希望 tableview 缩小,但我希望高度保持 33 的倍数。

我可以想到两种可能的方法:1)在情节提要中将小tableview设置为正确的高度(例如297),然后有没有办法通过情节提要在自动调整大小上设置最大尺寸?

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

4

1 回答 1

1

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

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

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

所以我使用的代码看起来像这样。我将 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]];
}
于 2013-07-25T17:07:14.657 回答