目前,swift写了个tab页面,是这样的:
//6. create tabs
let viewConversation = ConversationViewController()
let viewContact = ContactViewController()
let viewFile = FileViewController()
let viewFavorite = FavoriteViewController()
let viewMy = MyViewController()
let nvcConversation = UINavigationController(rootViewController: viewConversation)
nvcConversation.tabBarItem = UITabBarItem(title: mainTabs[0], image: UIImage(named:"tab_conversation"), tag:0)
nvcConversation.tabBarItem.selectedImage = UIImage(named: "tab_conversation_selected")
//nvcConversation.tabBarItem.badgeValue = "3"
let nvcContact = UINavigationController(rootViewController: viewContact)
nvcContact.tabBarItem = UITabBarItem(title: mainTabs[1], image: UIImage(named:"tab_contact"), tag:1)
nvcContact.tabBarItem.selectedImage = UIImage(named: "tab_contact_selected")
let nvcFile = UINavigationController(rootViewController: viewFile)
nvcFile.tabBarItem = UITabBarItem(title: mainTabs[2], image: UIImage(named:"tab_file"), tag:2)
nvcFile.tabBarItem.selectedImage = UIImage(named: "tab_file_selected")
let nvcFavorite = UINavigationController(rootViewController: viewFavorite)
nvcFavorite.tabBarItem = UITabBarItem(title: mainTabs[3], image: UIImage(named:"tab_favorite"), tag:3)
nvcFavorite.tabBarItem.selectedImage = UIImage(named: "tab_favorite_selected")
let nvcMy = UINavigationController(rootViewController: viewMy)
nvcMy.tabBarItem = UITabBarItem(title: mainTabs[4], image: UIImage(named:"tab_my"), tag:4)
nvcMy.tabBarItem.selectedImage = UIImage(named: "tab_my_selected")
self.viewControllers = [nvcConversation, nvcContact, nvcFile, nvcFavorite, nvcMy]
UITabBar.appearance().barTintColor = ColorMainTabBackground
//set bar item font
let barItemFont = FontMainTab
for nvcController in self.viewControllers!{
nvcController.tabBarItem.setTitleTextAttributes([NSFontAttributeName: barItemFont], forState: UIControlState.Normal)
}
//default select conversation index 0
self.selectedIndex = 0但是觉得不够标准。
想要去搞懂:
如何写tab才是标准的写法。
[折腾过程]
1.搜:
swift add tab
参考:
搜:
swift add tab bar item programmatically
swift add tab view programmatically
参考:
UITabBarController详解 – Carl_Huang的个人页面 – 开源中国社区

然后用下面代码:
import UIKit
import CoreData
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
let mainTabsTitleArr = ["消息", "通讯录", "文件", "收藏", "我"]
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
//application.statusBarHidden = true;
statusBarFrame = application.statusBarFrame
//print("statusBarFrame=\(statusBarFrame)")
//init a view controller
let viewConversation = ConversationViewController()
//init a UITabBarItem, set to view controller's tabBarItem
viewConversation.tabBarItem = UITabBarItem(title: mainTabsTitleArr[0], image: UIImage(named:"tab_conversation"), tag:0)
//set selected image
viewConversation.tabBarItem.selectedImage = UIImage(named: "tab_conversation_selected")
let viewContact = ContactViewController()
viewContact.tabBarItem = UITabBarItem(title: mainTabsTitleArr[1], image: UIImage(named:"tab_contact"), tag:1)
viewContact.tabBarItem.selectedImage = UIImage(named: "tab_contact_selected")
let viewFile = FileViewController()
viewFile.tabBarItem = UITabBarItem(title: mainTabsTitleArr[2], image: UIImage(named:"tab_file"), tag:2)
viewFile.tabBarItem.selectedImage = UIImage(named: "tab_file_selected")
let viewFavorite = FavoriteViewController()
viewFavorite.tabBarItem = UITabBarItem(title: mainTabsTitleArr[3], image: UIImage(named:"tab_favorite"), tag:3)
viewFavorite.tabBarItem.selectedImage = UIImage(named: "tab_favorite_selected")
let viewMy = MyViewController()
viewMy.tabBarItem = UITabBarItem(title: mainTabsTitleArr[4], image: UIImage(named:"tab_my"), tag:4)
viewMy.tabBarItem.selectedImage = UIImage(named: "tab_my_selected")
//init a tab bar controller
let mainTabBarController = UITabBarController()
//add view controller array to viewControllers of tab bar controller
mainTabBarController.viewControllers = [viewConversation, viewContact, viewFile, viewFavorite, viewMy]
//set tab bar controller as window root view controller
window?.rootViewController = mainTabBarController
return true
}效果是:
可以正确显示tab的
不过,对于页面的布局来说,顶部的statusBar都会被当前的view占用了:

然后进入第一个页面的字页面后,顶部的状态栏依然被覆盖了,底部也没了对应的tab栏了.
然后如果把第一个viewcontroller换成是:UINavigationController
//init a view controller
let viewConversation = ConversationViewController()
// //init a UITabBarItem, set to view controller's tabBarItem
// viewConversation.tabBarItem = UITabBarItem(title: mainTabsTitleArr[0], image: UIImage(named:"tab_conversation"), tag:0)
// //set selected image
// viewConversation.tabBarItem.selectedImage = UIImage(named: "tab_conversation_selected")
let nvcConversation = UINavigationController(rootViewController: viewConversation)
nvcConversation.tabBarItem = UITabBarItem(title: mainTabsTitleArr[0], image: UIImage(named:"tab_conversation"), tag:0)
nvcConversation.tabBarItem.selectedImage = UIImage(named: "tab_conversation_selected")
//init a tab bar controller
let mainTabBarController = UITabBarController()
//add view controller array to viewControllers of tab bar controller
//mainTabBarController.viewControllers = [viewConversation, viewContact, viewFile, viewFavorite, viewMy]
mainTabBarController.viewControllers = [nvcConversation, viewContact, viewFile, viewFavorite, viewMy]那么效果就变了:
加了navigation的viewcontroller后,视图中顶部就自动加上了导航栏:

并且,进入子页面后,顶部自动出现导航栏点返回Back按钮,同时,底部也会保留对应的tab
转载请注明:在路上 » [已解决]搞懂swift写tab的标准写法