2011-08-10 50 views
3

我想構想一種方式,我可以在標籤欄頂部浮動視圖。這基本上會覆蓋它。我不知道如何去做這件事。如果標籤欄本身是另一個控制器的子視圖,那麼這看起來很簡單,但根據我的理解,如果不「濫用」視圖控制器方法(即addSubview:tabbar.view或類似的東西),則無法真正做到這一點。把標籤欄前的視圖

基本上,iphone屏幕上的空間有限,標籤欄是導航,但有時我想使用該空間來簡要顯示信息。如果標籤欄是我的根控制器,我會認爲這是不可能的。

我讀過這裏的其他帖子,建議使用setHidesBottomBarWhenPushed,但我沒有使用導航控制器,我也想動態控制當酒吧被隱藏或被另一個視圖覆蓋,所以我可以移動新的視圖在需要時再次顯示標籤欄。

任何其他建議指向我在正確的方向將不勝感激。

+0

你應該繼承的UITabBar類。 或看看這裏:http://stackoverflow.com/questions/4020108/how-can-i-create-my-own-uitabbar – CarlJ

+0

我喜歡布拉德在這個問題的答案,關於使用你自己的圖像視圖,模仿標籤欄。簡單而靈活 – johnbakers

回答

1

我會建議以下幾點。

UIView 
    | 
    --UIView (this will hold the tab bar controller) 
     | 
     -- Tabbar controller 
    | 
    --Full Screen View 

所以基本上標籤欄被包含在一個UIView。這被添加到主UIView。當您想要全屏顯示時,可以將該視圖添加到主UI視圖。因此不需要隱藏/取消隱藏標籤欄。

+0

向UIView添加標籤欄控制器的最佳語法是什麼?是否像使用'addSubview:tabbarcontroller.view'? – johnbakers

5

您可以使用根窗口。如果您剛剛從[[UIApplication sharedApplication] keyWindow]獲得主窗口,則可以直接向其添加視圖。這將允許你再次在屏幕上的任何地方浮動任何東西。對於旋轉處理,你仍然會有一些疑慮,但是如果你沒有進行自動旋轉,那麼就不用擔心它。

另一種選擇是實際創建一個新的UIWindow並將東西放在任何你想要的地方。這是UIAlertView實際上的工作方式。這樣,它根本不會干擾你的視圖層次結構。這種方法有一個問題,因爲只有一個窗口會將事件(包括觸摸)分派到其子視圖。所以使用它基本上允許用戶仍然觸摸下方的酒吧。第一種選擇可能會更好,但我只是把它扔在那裏,以防有人發現它有用。

+0

非常感謝你的技巧爲完整的屏幕 –

+0

[[UIApplication sharedApplication] keyWindow]非常感謝 –

0

類似的東西:

if let indeedTabBarController = self.tabBarController { 

    let buttonHeight: CGFloat = 49 // height of tab bar 
    let buttonWidth = UIScreen.main.bounds.width/3 // in case if you have 3 tabs 
    let frame = CGRect(x: 0, y: UIScreen.main.bounds.height - buttonHeight, width: buttonWidth, height: buttonHeight) 
    let button = UIButton(frame: frame) 
    button.addTarget(self, action: #selector(self.someAction), for: .touchUpInside) 

    indeedTabBarController.view.addSubview(button) 
}