首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从AppDelegate启动ViewController,底部缺少选项卡栏

可能是因为没有正确设置或添加选项卡栏控制器(UITabBarController)。

要解决这个问题,可以按照以下步骤进行操作:

  1. 确保在AppDelegate中正确设置了根视图控制器(Root View Controller)。可以通过以下代码片段来设置根视图控制器:
代码语言:txt
复制
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    window = UIWindow(frame: UIScreen.main.bounds)
    
    let tabBarController = UITabBarController()
    let viewController1 = UIViewController()
    let viewController2 = UIViewController()
    
    tabBarController.viewControllers = [viewController1, viewController2]
    
    window?.rootViewController = tabBarController
    window?.makeKeyAndVisible()
    
    return true
}

上述代码创建了一个UITabBarController,并将两个视图控制器viewController1和viewController2添加到选项卡栏控制器中。然后将选项卡栏控制器设置为根视图控制器,并使窗口可见。

  1. 确保每个视图控制器都有一个对应的选项卡栏项(Tab Bar Item)。可以通过以下代码为视图控制器设置选项卡栏项:
代码语言:txt
复制
viewController1.tabBarItem = UITabBarItem(title: "Tab 1", image: UIImage(named: "tab1"), tag: 0)
viewController2.tabBarItem = UITabBarItem(title: "Tab 2", image: UIImage(named: "tab2"), tag: 1)

上述代码为viewController1和viewController2分别设置了选项卡栏项的标题、图像和标签。

  1. 确保选项卡栏控制器的视图正确显示在窗口中。可以在AppDelegate中的application(_:didFinishLaunchingWithOptions:)方法中添加以下代码:
代码语言:txt
复制
window?.rootViewController = tabBarController
window?.makeKeyAndVisible()

上述代码将选项卡栏控制器设置为根视图控制器,并使窗口可见。

通过以上步骤,应该能够解决从AppDelegate启动ViewController时底部缺少选项卡栏的问题。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云官网:https://cloud.tencent.com/
  • 云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 云数据库 MySQL 版:https://cloud.tencent.com/product/cdb-for-mysql
  • 云原生应用引擎(TKE):https://cloud.tencent.com/product/tke
  • 云存储(COS):https://cloud.tencent.com/product/cos
  • 人工智能平台(AI Lab):https://cloud.tencent.com/product/ai
  • 物联网开发平台(IoT Explorer):https://cloud.tencent.com/product/explorer
  • 移动应用开发平台(MADP):https://cloud.tencent.com/product/madp
  • 区块链服务(BCS):https://cloud.tencent.com/product/bcs
  • 腾讯云元宇宙:https://cloud.tencent.com/product/tencent-meta-universe
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【iOS开发】自动识别剪贴板内容

nil) } } 获取设备的剪贴板很简单,第一行代码就搞定了,if 语句中判断了一下剪贴板中的内容是不是链接,注意http和https都要写上,这点很容易被忽略(在浏览器地址中复制以...更值得注意的是,因为你需要让 App 在每次后台进入前台的时候都检测一下剪贴板中有没有链接,所以以上方法要放在 AppDelegate 文件的 applicationWillEnterForeground...AppDelegate.swift 而这个方法中是不能通过 self 来调用 ViewController 的,所以要曲线救国的话,你需要手动获取 Storyboard、ViewController,再设置...这句注释这里写自己的方法吧) 【150928 更新】 对比 applicationWillEnterForeground 和 applicationDidBecomeActive 这两个方法,前者是指 App后台进入前台...,后者是指 App处于活跃状态,所以前者相对于后者,缺少的部分是,当 App 刚刚启动,而不是后台取出的时候,它无法识别剪贴板。

1.5K30

Cocoa编程中视图控制器与视图类详解

)和标题(title)、用于显示标题的视图(titleView),以及用于当前视图向后导航的Back按钮(backBarButtonItem)和隐藏后退按钮(hidesBackButton)。...UITabBarController类       选项卡类允许用户在多个视图控制器之间移动并在屏幕的底部可定制该。...或其他任何类型的视图控制器),并通过设置的viewControllers属性将其添加到选项卡,使每个选项卡对应一个试图控制器。...vc2]; */ // 将TabBar控制器的当前视图添加到窗口 [window addSubview:tabBarController.view];   当然在应用程序委托AppDelegate...• navigationItem:导航子项 • editing: 是否处理编辑状态 • hidesBottomBarWhenPushed: 入栈时隐藏底部 • toolbarItems: 工具子项集

5K50

Mac开发基础练习:制作一个状态(NSStatusBar)上的App(二)

1.4 选中Main.storyboard文件,项目中删除,并清空工程配置,入下图: ?...像iOS中一样,应用启动加载完成后,设置UI是AppDelegate的这个方法-applicationDidFinishLaunching:开始的,如果我们在上面的工程中对这个方法设置调试断点,你会发现应用启动后...main.m文件实现代码 1.6 因为我们去除了window,因此ViewController对我们来说已经没有价值了,我们只需要把之前在ViewController中写的代码,放置到AppDelegate.m...AppDelegate.m文件 如果你在这中间的步骤没有错误,那么再次运行工程,你会发现状态的上图标又出现了,并且我们之前实现的功能也都可以正常响应了^_^ 整个工程的代码,可以从这里下载StatusBarDemoApp...结束语 项目小练习只是一个学习的开始,大家可以对这个小练习再添加一些功能:比如菜单,比如设置开机自动启动,再或者运行后隐藏Dock上的图标,对代码结构再进行合理的组织,比如把事件监听的方法,封装为一个工具类

1.3K30

macOS APP零到上架

一键直达沙盒:iSandBox-APP Store 0、初始化 xcode新建工程,并且run起来,会发现和iOS项目结构类似 AppDelegate:里面有App启动和终止的代理方法: - (void...:继承自NSViewController,是项目启动后的第一个窗口视图。...我们一般在ViewController内管理我们自己的View 可以通过代码的方式自定义WindowController和ViewController - (void)applicationDidFinishLaunching...右击Dock会有默认菜单列表 如果要自定义右键的菜单列表,则在appdelegate里面添加方法 -(NSMenu *)applicationDockMenu:(NSApplication *)sender...:appUrl]; } } 6、上架篇 向App Store的提审过程,被拒了两次,第一次是因为上架的APP必须是沙盒App,所以在项目内要添加沙盒相关配置 另外一个原因,是因为macOSmojava

70720

iOS项目——项目开发环境搭建

状态的风格style,有两种风格可选,自己根据情况选择。当然,是否需要隐藏状态,我们也可以在开发过程根据需要通过代码的方式进行设置。 可以根据需要设置是否隐藏状态,是否需要全屏等设置。   ...例如,在开发类似王者荣耀的游戏时这里的几个选项应该是设备类型选择Universal,设备方向是左横屏 + 右横屏,勾选隐藏状态,同事也勾选需要全屏。...*viewController = [[ViewController alloc] init]; //设置当前window的主控制器 self.window.rootViewController...这里比较推荐的两种搭建目录方法如下: 其一是完全将model和viewController分开,参见:iOS开发总结——项目目录结构,框架如下: 项目目录 ├── ThirdLib(三方库) │...区分其他文件) │ ├── AppDelegate.h │ └── AppDelegate.m ├── Model(数据模型类目录) │ ├── Macro(宏定义目录) │ ├── BLL

1.4K150

已有iOS工程中加入Flutter之Cocoapods+Flutter环境方式集成

然后,您的应用程序的目录下需要再次运行pod install。 podhelper.rb脚本将您的插件Flutter.framework和App.framework嵌入到您的项目中。...我们再来看一下目前的Xcode目录: image.png 五、开始使用,启动FlutterEngine和FlutterViewController 要从iOS应用中启动一个Flutter...#import "ViewController.h" #import "AppDelegate.h" @import Flutter; @interface ViewController () @end...FlutterEngine的方式创建FlutterViewController,这种方式,我们不需要预先创建FlutterEngine,而去按需创建,尤其是我们Flutter界面很少,而且不知道什么时候会启动...继承自FlutterAppDelegate,这种方法是官方推荐,好处就是可以监听到诸如点击状态回到顶部此类操作。

2K30

基础篇-UIApplication、UIWindow以及程序的启动流程看我就够了

(iOS9 中跟状态有关的已经过期,状态交给控制器UIViewController管理了) 应用界别的跳转 (openURL) 一 、设置应用程序图标右上角的红色提醒数字(如QQ消息的时候,图标上面会显示...return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); } } 这个默认的iOS程序就是...; ---- 程序启动的完整过程 1. main函数 2.UIApplicationMain 根据第三个参数创建对应的UIApplication对象 根据第四个参数AppDelegate创建并指定此对象为...分配新视图控制器到窗口root viewcontroller,然后使窗口显在示屏幕上。...分配新视图控制器到窗口root viewcontroller,然后使窗口显在示屏幕上。 四大对象关系图和程序启动流程图 ? ?

1.5K20

iOS_Memory Leak 内存泄露治理

底部: snapshots,可以设置检测泄露的时间间隔,也有立即检测按钮: Input Filter可通过线程过滤 Detail Filter可通过关键字过滤 也可选择时间段过滤...导致的循环引用,按调用堆栈找到对应的代码: 4.3.3、Call Tree页面 点击中间的左侧切换到Call Tree统计模式,也可通过底部的工具进行过滤 Separate By Thread...Call Tree:反转调用堆栈顺序 Hide System Libraries:隐藏系统库的调用堆栈信息 Flatten Recursion:会将调用栈里递归函数作为一个入口(很少使用) 底部可设置各种约束进行过滤...5.2、入口: Xcode 运行项目时可点击中部的Debug Memory Graph按钮,查看内存图: 5.3、使用分析: 5.3.1、分析方式1: 点击左侧 导航 - 底部 的 Show...为此,MLeaksFinder 提供了一个手动扩展的机制,开发者可以 UIViewController 跟 UIView 出发,去检测其它类型的对象的内存泄露。

42420

解决 iOS 15 上 APP 莫名其妙地退出登录

现在这完全说得通了,但唯一的问题是,在 Cookpad 中,我们只在应用启动Keychain中读取信息,而我的假设是,用户一定是点击了应用图标来启动应用,因此设备在这时应该总是解锁的,对吗?...为了避免在我们的AppDelegate上持有一些隐式解包的可选属性,我们在init()方法中进行了一些设置,其中一部分涉及Keychain中读取访问令牌。...寻找根本原因 我的调试界面很有用,但它缺少了一些有助于回答所有问题的重要信息:时间。...: 1、启动应用程序 2、简单使用 3、强制退出应用 4、锁定我的设备并将其放置约 30 分钟 5、解锁设备 6、再次启动应用 每当我在第 6 步中再次启动应用程序时,我 100% 确定设备已解锁,因此我坚信我应该能够...:) — 12:03:04 ViewController.viewDidAppear(_:) — 12:03:04 在我真正解锁手机并点击应用图标之前的25分钟,应用程序本身就已经启动了!

83810

解决 iOS 15 上 APP 莫名其妙地退出登录 解决 iOS 15 上 APP 莫名其妙地退出登录

现在这完全说得通了,但唯一的问题是,在 Cookpad 中,我们只在应用启动Keychain中读取信息,而我的假设是,用户一定是点击了应用图标来启动应用,因此设备在这时应该总是解锁的,对吗?...为了避免在我们的AppDelegate上持有一些隐式解包的可选属性,我们在init()方法中进行了一些设置,其中一部分涉及Keychain中读取访问令牌。...寻找根本原因 我的调试界面很有用,但它缺少了一些有助于回答所有问题的重要信息:时间。...,因此我坚信我应该能够 AppDelegate.init()中的Keychain读取数据。...:) — 12:03:04 ViewController.viewDidAppear(_:) — 12:03:04 在我真正解锁手机并点击应用图标之前的25分钟,应用程序本身就已经启动了!

1.5K20

导航调色那些事儿2. 标签TableBar那些事儿

List 中添加一个 Key为View controller-based status bar appearance的 item,其 Type 设为 Boolean,Value 设为 NO 方法二: 然后在AppDelegate.mapplication...View controller-based status bar appearance的 item,其 Type 设为 Boolean,Value 设为 NO 方法二: 在需要隐藏StatusBar 的 ViewController..."] forBarMetrics:UIBarMetricsDefault]; 1.8 导航的半透明效果 如果设置成NO,tableView就从状态下面开始。...标签TableBar那些事儿 2.1 调色 可以完全参考导航的,几乎雷同。 2.2 关闭半透明效果 一旦关闭标签的半透明效果,控制器的view就不会到达屏幕最底部了,而是到了标签的紧上方。...标签的默认高度是49. self.tabBar.translucent = NO;

1.5K50

iOS开发--一步步教你彻底学会『iOS应用间相互跳转』

原理:通过设置跳转到应用B的URL Schemes(自定义的协议头),应用B将其自身“绑定”到一个自定义URL Schemes上,就可以应用A中利用应用B的URL Schemes启动应用B了。...App-A跳转到App-B 下边学习以下应用A跳转到应用B的特定界面。 5....NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { // 1.获取导航控制器...之前我们在应用App-B中通过AppDelegate执行不同页面的跳转。在对应方法中我们可以拿到完整的URL,在主控制器ViewController中设定一个属性,将该URL保存在主控制器中。...AppA" 在App-B的主控制器ViewController中增加一条属性@property (nonatomic, copy) NSString *urlString;,并在App-B中通过AppDelegate

1.2K30

iOS性能优化之启动优化

,这个启动方式就是冷启动启动:当启动应用时,后台已有该应用的进程(例:按home键回到桌面,但是该应用的进程是依然会保留在后台,可进入任务列表查看),所以在已有进程的情况下,这种启动已有的进程中来启动应用...OS X Mountain Lion10.8开始,核心及核心扩充(kext)与zones在系统启动时也会随机配置 iOS(iPhone、iPod touch、iPad):Apple在iOS4.3内导入了...load] 0x100005FAC 0x00000048 [ 1] -[ViewController viewDidLoad] 0x100005FF4 0x0000007C [ 2] -[AppDelegate...通过LinkMap文件中的顺序,查看最终的排序是否符合预期 在工程根目录创建.order文件 打开hk.order文件,写入启动时需要的方法/函数 +[ViewController load] +...[ 2] +[AppDelegate load] 0x100005FAC 0x0000009C [ 3] _main 0x100006048 0x00000048 [ 1] -[ViewController

1.6K11

兼容 - 纯代码完美适配 iPhoneX

图中我们可以看出: status bar 20 变成了 44 导航条高度依然是 44 顶部的总体高度变成 88 安全区域距离页面底部需要保留 34pt,系统自带的 Tabbar已经适配好了...没有适配 iPhoneX的触底页面 旧工程如何在iphoneX全屏显示 只需要在LaunchImage中添加一个尺寸为1125 × 2436的启动图,并且工程使用LaunchImage加载启动图的,而不是使用...,如果正在通话状态会变高,导致判断异常,下面只是一个例子,请勿直接使用!...关于状态另外两个需要注意的地方: 不要在iPhone X下隐藏状态,一个原因是显示内容足够高了,另一个是这样内容会被刘海切割。 ?...值得注意的是:我这个项目中使用的是系统自带的导航、Tabbar。

4.4K20

iOS程序猿如何快速掌握 PHP,化身全栈攻城狮?

下载完成后,双击安装.安装成功后,选择 Mange Servers-->Start All启动本地服务器.启动成功后,在浏览器中输入 http://localhost,就可以看到一个默认的PHP页面....3.在浏览器地址输入: http://localhost/find_php/index.php,即可看到用PHP写的Hello World. ?...AppDelegate 入口文件 iOS应用通常是以 AppDelegate 文件作为编码的起始(准确说的是 main.m,在此不细究).在PHP中,你可以使用一个 index.php 文件作为你的 php...> 然后在浏览器地址,输入: http://localhost/find_php/index.php?...MVC 设计模式 我们仍然常用的MVC模式来开始更进一步的讨论.M,即Model数据模型,对应于我们在地址输入的model;V,即视图View,更直接地说是显示数据,为了简化讨论,我们此处仅对移动端开发常用的

1.7K71
领券