2008-10-21 22 views
15

當使用UITableViewController時,initWithStyle:方法根據文檔 - 「正確的尺寸」自動創建底層的UITableView。我的問題是,這些「正確的尺寸」似乎是320x460(iPhone的屏幕尺寸),但我推動這個TableView /控制器對進入一個UINavigationController,它本身包含在一個UIView中,它本身約爲高度的一半的屏幕。在小表中使用UITableViewController?

沒有框架或邊界的爭吵我可以想出正確重置表的大小,因此它是「太長」,這意味着有一個從屏幕底部推行的行的集合,而不是通過滾動可見或不可達。

所以我的問題歸結爲:什麼是正確的方式告訴UITableViewController調整其組件UITableView到指定的矩形?

謝謝!

更新我試着在這裏建議都沒有用的所有技術,但我沒有找到一個有趣的事情:如果我避開了UINavigationController的共(這我還不願意生產的事,但作爲實驗),並添加表視圖作爲我提到的封閉視圖的直接子視圖,給出的框架大小受到尊重非常時刻我將UINavigationController重新引入混合中,無論它是在表視圖之前還是之後添加爲子視圖,並且無論將表視圖之前還是之後的alloc/init添加爲子視圖,結果與之前一樣。

我開始懷疑UINavigationController的是沒有太大的玩家團隊...

更新2檢查幀大小後,屏幕上的表視圖是一個很好的的建議:原來,實際上導航控制器在加載和顯示之間調整了一段時間。我的解決方案,最好的辦法是緩存加載時給出的框架,並在tableView:cellForRowAtIndexPath:開始時更改它。你爲什麼要問?因爲這是我發現的那個地方,所以這就是爲什麼!

我不認爲這是一個解決方案,因爲它是明顯不當的,但對於其他人閱讀的好處,但它似乎工作。

回答

11

爲什麼不只是使用常規的UIViewController並手動創建表?

+1

這個問題達成一致,只是擴展的UIViewController,而是和你自己添加的tableView財產這樣 @property (nonatomic, retain) UITableView \t *tableView; Zennichimaro 2013-03-28 02:39:27

1

我同意本的回答。由於視圖上的其他控件,我經常遇到需要調整UITableVIew的情況。

我通常只是有一個UITableView IBOutlet中一個普通的UIViewController。然後,如果我需要的話,我可以操縱UITableView對象的框架,使其達到我需要的大小。

+0

護理闡述一下你究竟是如何做到這一點? – rpj 2008-10-21 22:51:18

+1

只是使用普通的UIViewController和 - 例如 - 編程,創建TableView - UITableView * mTab​​leView = [[UITableView alloc] initWithFrame:CGRectMake(0,0,320,400)]; mTab​​leView.delegate = self; [[self view] addSubview:mTableView]; 那裏你有它! :) – 2012-07-17 13:30:25

1

我不知道你爲什麼要爲你的表創建一個額外的視圖控制器。但是,在您的代碼中,我沒有看到您將表視圖添加到其父項。你也可以嘗試縮小邊界高度,直到整個事物出現在屏幕上;一旦你這樣做了,它可能會讓你瞭解它爲什麼沒有按你期望的方式工作。

+0

我需要一個視圖控制器能夠推到一個UINavigationController,因此它爲什麼在那裏。因此,我的印象是沒有必要將表視圖添加到父視圖,因爲視圖控制器負責代理服務器。我錯過了什麼嗎? – rpj 2008-10-21 19:26:45

+0

您是否將MyUIViewControllerSubclass的視圖插座分配給您的表或其封閉視圖? – 2008-10-21 19:35:24

+0

正如我發佈爲「答案」的代碼所示,我明確地將「視圖」出口分配給我剛剛創建的表格。 – rpj 2008-10-21 22:50:46

1

檢查的UITableView的autoresizingMask和contentMode性能。這些都會影響框架。

0

如果您使用的是界面生成器,您可以直接進入「桌面視圖大小」屬性窗口,並使用另一個小部件的高度更改內容和滾動條的底部插入。

3

我有同樣的問題,我通過調整UITableViewController的viewDidAppear函數中的tableView來解決它。不是理想的解決方案,但它工作。

6

我有同樣的問題,我解決了它:

-(void) loadView { 
    [self setView:[[[UIView alloc] initWithFrame:CGRectZero] autorelease]]; 
    [[self view] setAutoresizesSubviews:NO]; 

    /* Create & configure table and other views... */ 

    [self setResultsTable:[[RadarTableViewController alloc] initWithNibName:nil bundle:nil]]; 
    [[resultsTable view] setFrame:CGRectMake(0,45,320,200)]; 
} 

這是在父(只是在我的情況下,一個普通的UIViewController)控制器來完成。

2

您可以通過設置上邊距:

UIEdgeInsets inset = UIEdgeInsetsMake(50, 0, 0, 0); 
    self.tableView.contentInset = inset; 

這不是一個很好的做法,萬一你想在上面更多的空間,你可以使用它。

不應該使用的UITableViewController,只需簡單地使用的UIViewController和UINavigationController編程創建的UITableView

0

嘗試:

self.edgesForExtendedLayout = UIRectEdgeNone; 

//This one in case your NavigationController is not Translucent 
self.extendedLayoutIncludesOpaqueBars = NO; 

希望這有助於。

1

我固定這段代碼

{ 
    UIEdgeInsets insets; 
    insets.left = 0; 
    insets.right = 0; 
    insets.top = 0; 
    insets.bottom = 60; 
    self.tableView.contentInset = insets; 
    [self.tableView setScrollIndicatorInsets:insets]; 
} 
相關問題