ios - Swift - 作为 ChildViewController 的 UITabBarController 不起作用
问题描述
我需要将 UITabBarController 添加为 RootViewController 的子视图,但不能触摸 UITabBarController。
这是我的代码。我该如何解决?
func addSubviewToSelf(){
var tabVC = TabBarVC()
addChildViewController(tabVC)
self.view.addSubview(tabVC.view)
tabVC.didMove(toParentViewController: self)
tabVC.view.snp.makeConstraints{ (make) in
make.top.bottom.left.right.equalTo(self.view)
}
}
解决方案
这是将 UITabBarController 添加为 UIViewController 的 childView 的简化版本,我使用 NSLayoutAnchor API 代替 SnapKit
import UIKit
class RootViewController: UIViewController {
override func loadView() {
view = UIView()
view.backgroundColor = .white
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
addChildVC()
}
func addChildVC() {
let tabBarVC = TabBarVC()
addChild(tabBarVC)
view.addSubview(tabBarVC.view)
tabBarVC.view.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
tabBarVC.view.leadingAnchor.constraint(equalTo: view.leadingAnchor),
tabBarVC.view.trailingAnchor.constraint(equalTo: view.trailingAnchor),
tabBarVC.view.bottomAnchor.constraint(equalTo: view.bottomAnchor),
tabBarVC.view.topAnchor.constraint(equalTo: view.topAnchor)
])
tabBarVC.didMove(toParent: self)
}
}
子类UITabBarController
如下
class TabBarVC: UITabBarController, UITabBarControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
delegate = self
// Do any additional setup after loading the view.
configureTabBarItems()
}
func configureTabBarItems() {
let vc1 = UIViewController()
vc1.view.backgroundColor = .orange
vc1.tabBarItem = UITabBarItem(tabBarSystemItem: .search, tag: 0)
let vc2 = UIViewController()
vc2.view.backgroundColor = .yellow
vc2.tabBarItem = UITabBarItem(tabBarSystemItem: .bookmarks, tag: 1)
let navigationController1 = UINavigationController(rootViewController: vc1)
let navigationController2 = UINavigationController(rootViewController: vc2)
setViewControllers([navigationController1, navigationController2], animated: false)
tabBar.tintColor = .red
tabBar.unselectedItemTintColor = .black
}
}
由于您没有给出 UITabBarController 子类实现,您可以创建一些 UIViewControllers 并将其分配给setViewControllers(_ viewControllers::[UIViewControllers]?, animated: Bool)
方法。还设置tintColor
和unselectedItemTintColor
属性并检查是否适合您。最后清理构建项目并运行,它应该适合你。
推荐阅读
- tensorflow - 为什么 SSD 在数据增强期间会调整随机作物的大小?
- java - 从 EC 点和 ECParameterSpec 构造 EC 公钥会给出无效的 x 值
- ios - Flutter on Mac OS 软件包问题
- python - 为什么安装pysam python包失败?
- arrays - 从 Bash 中的命令输出创建二维数组
- python - 语音到文本识别:Python 中的文本校正和结果即兴创作
- python - Numba 抱怨打字 - 但提供了所有类型
- python - Sagemaker 是否在训练和预测步骤之间传递模型本身以外的任何数据?
- jquery - 当设备视口大于 1000px 时如何运行 jQuery 代码
- android-studio - 如何避免数据绑定的“警告:[cast] 冗余强制转换为字符串”