2013-12-13 23 views
0

我有一個相當規則的UIViewController,它是UINavigationController層次結構的一部分,這自然使得視圖頂部有一個UINavigationBar。衆所周知,iOS7的導航欄與以前的版本非常不同。如何在使用iOS7的UINavigationBar時以編程方式定位UITableView?

如果我在故事板中拖動UITableView進入我的視圖,則表視圖的「框架」將覆蓋整個視圖(I.E [tableView setFrame:self.view.frame];)。甚至落後於NavigationBar。 這使得如果我滾動,內容將通過欄微弱可見。 與大多數人相反,我其實很喜歡這個。

在我當前的視圖控制器中,我想以編程方式創建UITableView,並將其作爲子視圖放置在此處。但是,我無法通過這種方式達到同樣的效果。

我已經試過

UITableView *table = [[UITableView alloc] initWithFrame:self.view.frame]; 
[self.view addSubview: table]; 

這使得導航欄後面的「頂部滾動點」的住宿。想象一下tableView中的單個單元格,通過頂部欄可以隱約看到它。如果我向下滾動,它會在它後面彈出。這是默認的「最高位置」。

我也曾嘗試

CGRect frame = CGRectMake(0, 'nav.y+nav.height', self...width, self...height-y);  
UITableView *table = [[UITableView alloc] initWithFrame:frame]; 
[self.view addSubview: table]; 

簡單地放置表視圖中UINavigationBar下面的矩形,但我不會得到吧檯後面的滾動透明效果。

我也試過與此相伴的第一個例子:

[tableView setContentOffset:CGPointMake(0, 'below navbar')]; 

這使得它留正是我想要留下來,但只要我觸摸它(滾動和釋放),它滾動備份在導航欄後面,並停留在那裏。

實現此效果的程序化解決方案是什麼?每當我滾動得太遠時,是否必須設置偏移量,還是有更簡單的解決方案?隨着這個iOS7風格,我想他們會添加一些像[tableView setVisibleFrame:]什麼的..?

回答

2

像正常一樣添加故事板中的表格,但要確保將它連接到插座(我們現在將其稱爲_tableView)。

在您的視圖控制器的 -viewDidLoad

然後設置頂部邊界是狀態欄加上導航欄:

`self.tableView.contentInset = UIEdgeInsetsMake((self.navigationController.navigationBar.frame.origin.y + self.navigationController.navigationBar.frame.size.height),0,0,0);'

這將確保所有的單元格都可見,但也會用白色填充導航欄後面的區域,因此欄不會變成灰色。

+0

啊,謝謝。我以前從來沒有聽過'inset'這個詞,但這正是我所期待的。爲了記錄,問題直接針對以編程方式創建tableView,而不是通過Storyboard和使用Outlets添加。無論如何,在我的第一個「示例」之後,你的代碼行完成了這個訣竅,謝謝。 – Sti

相關問題