2012-04-17 22 views
0

我試圖在顯示iAds時調整表格視圖的高度。Obj-C,當iAds顯示時調整我的UITableview的高度

我正在使用以下代碼。

CGRect bounds = [tableView bounds]; 
[tableView setBounds:CGRectMake(bounds.origin.x, 
          bounds.origin.y, 
          bounds.size.width, 
          bounds.size.height - 100)]; 

我也試過幀而不是邊界。

我知道100比我的廣告的高度大,但它看起來像是從頂部和底部取下50,並垂直對齊中間的桌子。而不是從底部100。我的廣告顯示在底部。

我想知道如果可以自動調整大小,我從界面生成器中取出底部的紅色標記,但這並沒有解決問題。

有什麼建議嗎?

+2

您只需根據iAds出現和消失來調整表格視圖的框架高度。 – 2012-04-17 21:03:12

+0

你使用的是UITableViewController的子類嗎? – jackslash 2012-04-17 21:32:28

+0

@ praveen-k,我該怎麼做? – Jules 2012-04-17 21:41:50

回答

0

不要混淆boundsframe。它們是相似的,但非常不同,如果您在更改bounds的原點時不瞭解其差異,則會導致出現奇怪的結果。我通常只設置一個框架的邊界,以獲得初始大小。對於一切,我通常只設置框:

CGRect tableFrame = tableView.frame; 
CGFloat iAdHeight = 50.f; 
[tableView setFrame:CGRectMake(tableFrame.origin.x, 
           tableFrame.origin.y, 
           tableFrame.size.width, 
           tableFrame.size.height - iAdHeight)]; 

除非你已經做了一些奇怪的類似改變你的表視圖錨,這應該工作。

有關boundsframe之間的差異一個很好的參考,還有一些其他的真棒UIKit的東西,看WWDC 2011視頻會議121 - 「理解的UIKit渲染」。

+0

感謝@larsacus我實際上需要這個代碼來與你的庫一起使用:)我已經在一個函數中使用了上面的代碼,所以我可以在其他tableview屏幕上重新使用它。 – Jules 2012-04-18 07:19:48

0

試試這個:

CGRect bounds = [tableView bounds]; 
[tableView setBounds:CGRectMake(bounds.origin.x, 
                            bounds.origin.y - iAdHeight/2, 
                            bounds.size.width, 
                            bounds.size.height - iAdHeight)]; // Replace iAdHeight with height of iAd 

您的代碼doesnt't工作,因爲表視圖的起源是在中間,所以你只有在底部垂直收縮時,它調整的y值。

0

這將改變一個tableView的框架,使其底部100px更小。 (您可以通過這種方式更改頂部,左側,底部,並使用負值再次增大大小)。

tableView.frame = UIEdgeInsetsInsetRect(tableView.frame, UIEdgeInsetsMake(0, 0, 100, 0)); 
+0

這確實_exactly_與他的代碼所做的事情相同 – larsacus 2012-04-17 22:46:26

+0

我不同意。它完全符合你的建議 - 調整框架底部而不是界限底部。一個區別是我的一小時前做了它。 – danh 2012-04-17 23:06:55

+0

我意識到,我發佈後,意識到他設置的邊界,而不是框架。 'UIEdgeInsetsInsetRect'確實有效地改變了這個上下文中的框架。 – larsacus 2012-04-18 15:10:48

相關問題