2013-07-25 21 views
0

我有一個行高爲33和高度爲363的表視圖。當在iPhone 5上顯示時,沒有添加的表單元格被切斷,很好地結束和身份證好。該自動調整大小的樣子:當在iOS故事板中使用自動調整如何保證UITableView的單元格不會局部

Autosizing on iPhone 5 screensize

現在的問題是,當我嘗試這一個3.5英寸的iPhone 4屏幕上,最後一個單元格是成功的一半切斷因爲現在的高度是275我想實現代碼如下縮小但我想高度保持33的倍數。

我可以想到兩種可能的方法: 1)在故事板中將小型tableview設置爲正確的高度(比如說297),那麼是否有辦法通過故事板設置自動調整的最大尺寸?

2)以編程方式檢測iPhone類型並在代碼中進行調整。什麼是最安全的方式來做到這一點?

回答

1

您可以通過檢測iPhone類型(如#2)來執行代碼,或者如果您使用佈局約束,則可以在代碼中添加一個將表視圖的高度與屏幕高度關聯的約束。表格視圖的高度可以用屏幕高度乘以乘數加常數來表示,所以如果求解這兩個等式,您將得到乘數和常數的值,這些值將起作用:

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

如果你工作了這一點,它給你乘數= 0.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]]; 
} 
+0

他正在使用彈簧,你建議AutoLayout –

+0

@DuricanRadu,是的,無論是或者像他的第2號建議一樣的代碼。沒有辦法用彈簧做他想做的事。 – rdelmar

+0

感謝rdelmar,我已經打開了自動佈局,它沒有破壞我的應用程序,所以我會去 - 在上面的代碼中,雖然倒數第二行中的self.tableheight導致未找到屬性的構建失敗? – Knightsy

相關問題