2013-10-04 92 views
28

我試着口我的應用程序iOS7,但我的自定義TableViewController是顯示搜索很多關於它下TabBar :(的iOS 7定製的TableView下的TabBar

IM的最後一行(小區),但我不覺得。任何解決方案誰能幫我

My Custom Table View class

在打擊截圖顯示錯誤(僅顯示由於IM draging到最多顯示的TabBar下隱藏的產品最後一個產品的一部分):

screenshot

謝謝。

回答

6

在iOS 7中,viewController使用全高。有一個屬性介紹爲

self.automaticallyAdjustsScrollViewInsets = NO; 

將其設置爲no。然後檢查,或者設置UIEdgeInset,如果沒有正確設置它。

UIEdgeInsetsMake(top, left, bottom, right) 

看到這裏 https://developer.apple.com/library/ios/documentation/userexperience/conceptual/TransitionGuide/AppearanceCustomization.html

編輯:嘗試也是這個

self.edgesForExtendedLayout = UIRectEdgeNone; 
+4

我把它(已經測試,如果你看到評論代碼)。但是沒有解決它:( –

+0

不適用於我的結局 – Cesare

0

使用的問題被掩蓋了:

-(void)viewDidLayoutSubviews 
{ 
    [super viewDidLayoutSubviews]; 
    self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 112, 0); 
} 

但它並沒有解決,因爲在每個iPhone和eac上h應用程序tableview我有一個不同的底部空間。

所以這是一個糟糕的解決方案。

我不知道解決這個問題的方法。

1

UINavigationControllerUITabBarController都有一個透明度標誌,可以通過編程或故事板設置。

UINavigationController也有兩個標誌,用於控制內容是否在頂部或底部欄下延伸。您可以再次以編程方式或在故事板中設置它們。這將適用於所有子視圖。

每個UIViewController都可以在代碼中設置自己的偏好。該物業被稱爲edgesForExtendedLayout,您可以設置所有組合。

使用這些屬性將允許AutoLayout和Springs'n'Struts按照您希望的方式調整視圖,而不考慮設備。

UIViewController有很多新的屬性,你會想看看。

0

我現在解決了我的問題,改變我的BaseTableViewController從UIViewController繼承到UITableViewController。

但是,使用一個UIViewController內的TableView不解決:(

感謝。

33

我有同樣的問題,用故事板解決了這個問題。 在選項卡欄控制器上,轉到屬性檢查器Simulated Metrics,並將Bottom Bar設置爲不透明選項卡欄。而已! 查看圖像波紋管的描述。 enter image description here

Saudações! (Greetings!)

+2

不透明只是一種解決方法:不要使用它,它是醜陋的 –

+1

ü保存我的一天男人(?ty –

+0

我改變爲不透明標籤欄後,我改變回無,然後它仍然工作 – ittgung

2

UIViewController有兩個新屬性可以幫助您:topLayoutGuidebottomLayoutGuide。它們返回您需要避免的父視圖控制器控件的高度。在這種情況下,bottomLayoutGuide將返回標籤欄的偏移量。

您的自定義視圖控制器可能是壓倒一切的方法,而不是調用super的實施方案,其中這會爲你做。我猜你正在安裝AutoLayout約束或手動設置視圖的框架來填充視圖。您只需將[bottomLayoutGuide length]中的值包含到佈局計算中即可。如果您支持輪換,則應該在willAnimateRotationToInterfaceOrientation:duration:中更新該值。

0

也許不是一個正確的答案,也因爲這個原因我發佈這個答案,所以你可以告訴我,如果這個答案可能是一個可行的解決方案。

就我而言,我喜歡的半透明效果,所以我在表中添加一個頁腳,我已經修改了scrollIndicators。

- (void)viewDidLoad 
{ 
    // Do any additional setup after loading the view. 
    [super viewDidLoad]; 
    UIView *footer = [[UIView alloc]initWithFrame:CGRectMake(0, 0, self.agendaItemsTable.frame.size.width, self.tabBarController.tabBar.frame.size.height)]; 
    self.agendaItemsTable.tableFooterView = footer; 
    self.agendaItemsTable.scrollIndicatorInsets = UIEdgeInsetsMake(0, 0, self.tabBarController.tabBar.frame.size.height, 0); 

} 

您怎麼看?

28

我找到了答案,在另一篇文章你的問題,通過dariaa回答,在這裏:

Tab Bar covers TableView cells in iOS7

我爲我工作的偉大。

請不要信任我,因爲我不是解決它的原始人。

在您的自定義TableViewController,下添加這兩行[超級viewDidLoad中]:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.edgesForExtendedLayout = UIRectEdgeAll; 
    self.tableView.contentInset = UIEdgeInsetsMake(0., 0., CGRectGetHeight(self.tabBarController.tabBar.frame), 0); 
} 
+0

謝謝,這解決了我的標籤欄問題 – Kunani

0

我有同樣的問題,和上票選答案沒有解決這個問題。請參閱my answer以獲得類似問題Tab Bar covers TableView cells in iOS7

我通過手動將表視圖控制器的viewWillAppear:方法中的表視圖的框架設置爲屏幕高度 - (狀態欄高度+導航欄高度+標籤欄高度)來解決問題。

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 

    // Adjust height of tableview (does not resize correctly in iOS 7) 
    CGRect tableViewFrame = self.tableView.frame; 
    tableViewFrame.size.height = [self heightForTableView]; 
    self.tableView.frame = tableViewFrame; 
} 

- (CGFloat)heightForTableView 
{ 
    return CGRectGetHeight([[UIScreen mainScreen] bounds]) - 
      (CGRectGetHeight([[UIApplication sharedApplication] statusBarFrame]) + 
      CGRectGetHeight(self.navigationController.navigationBar.frame) + 
      CGRectGetHeight(self.tabBarController.tabBar.frame)); 
} 

如果有人發現這個問題的更好的解決方案,請分享!

+2

你在這裏使用viewWillAppear錯誤的初學者這是一個常見的錯誤,應該在viewWillLoad。viewWillAppear每次出現視圖時觸發!你不希望視圖設置代碼在每次你的視圖出現的時候都會觸發,只有動態的代碼纔會在viewWillAppear中出現,比如動態更新的數據,如果視圖邏輯與數據更新相關,你可以調用視圖邏輯,如視圖刷新,但視圖設置不應該在viewWillAppear。 – smileBot

+2

cocoanut:根據我的經驗,這樣的幀我並不總是在viewDidLoad中設置視圖,但它們設置在viewWillAppear中,因此,如果viewDidLoad中的幾何計算需要基於視圖中的視圖,則會導致計算結果不正確。 – Jeff

+1

@Jeff同意。我把這段代碼放在'viewWillAppear:'中,因爲不能保證幀將被設置在'viewDidLoad'中。 –

8

2線看到我的答案在viewDidLoad,這就是它!

self.edgesForExtendedLayout = UIRectEdgeAll; 
self.tableview.contentInset = UIEdgeInsetsMake(0.0f, 0.0f, CGRectGetHeight(self.tabBarController.tabBar.frame), 0.0f); 
+1

'UIRectEdgeAll'默認設置爲 – pxpgraphics

5

這個問題的根本原因是automaticallyAdjustsScrollViewInsets只在您的VC的視圖層次第一滾動視圖有效。它沒有被蘋果公司記錄,但它是唯一的方式,VC會檢測到需要修改的滾動視圖,除非你使用的是UITableViewController。

因此,爲了解決您的問題,而無需手動調整插圖,這樣做:

  1. 確保「調整滾動查看插圖」被選中。
  2. 請確保tableView是在視圖層次結構中的子視圖的第一個。 (向上移動它上面的所有其他元素)
+0

哇,這使得可以保持標籤欄的半透明行爲,並仍然使滾動視圖項在其上滾動。謝謝! – Peterdk

1

嘗試以下操作:

if ([self respondsToSelector:@selector(edgesForExtendedLayout)]) 

self.edgesForExtendedLayout = UIRectEdgeBottom; 
1

我有同樣的問題。解決方法之一是使工具欄不是半透明。以下是如何做到這一點:

希望這有助於。

謝謝。

5

我的朋友們,我無法告訴你我有多掙扎。沒有一個故事板的重新配置從未幫助過我。這個問題是完全一樣的原貼,我已經成功使用,以解決它:

爲SWIFT 3

self.edgesForExtendedLayout = [] 

的Objective-C的

self.edgesForExtendedLayout = NO; 
+1

令人難以置信,但這是我在tabbar下查看問題的答案。 –