2012-03-14 93 views
0

我必須將表格的寬度分爲2,3,5等等部分。目的是用2,3,5,...等大小的方形子視圖填充表格單元格。 (圖片) 當然,桌子的高度取決於此。確定iPad上UITableView的尺寸

這是我如何確定表的大小,並根據要放置的圖像數來劃分它。 numberOfPicsPerRow方法返回用戶選擇在表格的每一行中顯示的圖像數量的整數值。

- (CGFloat) rowHeight{ 

    fcAppAppDelegate *delegate = (fcAppAppDelegate *); 

    CGRect  bounds = self.tableView.bounds; 
    //CGRect   bounds = self.view.bounds; // Alternative that returns the same result. 
    float  tableWidth; 
    if (UIInterfaceOrientationIsPortrait([[UIApplication sharedApplication] delegate].tabBarController.interfaceOrientation)) 
     tableWidth = bounds.size.width; 
    else 
     tableWidth = bounds.size.height; 

    NSLog (@"tableWidth: %f", tableWidth); 
    return tableWidth/[MatrixPhotoListTVC noOfPicsPerRow]; 
} 

這是我設置的第一次表的行高:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.tableView.rowHeight = [self rowHeight]; 

} 

一切工作正常在iPhone上。然而,在iPad上,tableView.bounds或view.bounds返回(width = 320,heiht = 372)。 有趣的是,當設備旋轉時,這些值是正確的。 (width = 768,height = 960)

有沒有人對此有過解釋? viewDidLoad不是確定表格大小的合適位置嗎?

回答

0

Someteimes談到它 - 在這種情況下寫這個問題 - 使所有的差異。

但是,它也可能發生在其他人身上,因此我將問題保留在系統中。這就是答案:

viewDidLoad在視圖被封裝後被稱爲immediatley。這意味着在大多數情況下它是從一個Nib文件加載的。我使用的筆尖文件僅爲iPhone設計,而不適用於iPad尺寸。 這就是視圖尺寸正是它們在IB中的原因。

我把viewDidLoad中的調用移到了viewWillAppear,它在那裏工作正常。顯然,iOS會在viewDidLoad和viewWillAppear的調用之間自動調整iPad的視圖(它很好)。

如果有人從學術或文獻的角度來看我可以發出電話的更好的地方,那麼我們將非常感謝他們提示。

但是,現在它似乎工作正常。

+0

。在'viewDidLoad:'視​​圖剛剛加載時,它與您在IB中創建的視圖相同,包括大小。然後,在將視圖添加到視圖層次結構之前,將根據自動調整屏蔽來調整視圖大小,然後調用viewWillAppear:,然後添加視圖。這就是爲什麼'viewDidLoad:'dimension *應該*對當前視圖層次結構正確。 – Pascal 2012-03-14 13:23:03

0

我會將代碼切換到方法-viewWillAppear或-viewDidAppear,因爲任何佈局已經由表視圖完成。

如果UITableView的子類是繼承是該方法的另一種可能:你這樣做是正確的

- (void)layoutSubviews { 
    [super layoutSubviews]; 
    .... 
} 
+0

謝謝。這不是太晚了嗎?我將設置tableView的行高,因爲標準值不適合。 – 2012-03-14 15:03:17

+0

你是對的 - (void)viewDidLoad是一個更好的地方。我的代碼有一個自定義的UITableView和單元格,當表視圖重新加載時需要佈局,因此我改用上述方法。但是這隻有在你已經分類了UITableView的情況下才有意義。如果可能的話,管理控制器中的所有內容是應該的。修正了我的答案,讓它成爲可能性,而不是比給出的第一個解決方案更合適的選擇。 – Conor 2012-03-15 08:27:04