Sim*_*mon 15 uitabbarcontroller ios
我可以使用创建一个UINavigationController自定义栏类initWithNavigationBarClass:toolbarClass:.似乎没有相应的UITabBarController,所以如何让它使用自定义UITabBar类?
到目前为止我看到的每个解决方案都不合适,因为它们也是如此
UITabBarController而不是更改其现有标签栏,或UITabBarController抛弃并创建一个新的控制器类.我希望UITabBarController在代码栏中使用自定义类创建一个真正的代码.我该如何实现这一目标?
Luk*_*ers 12
这真是太难了!我提出的最好的是子类化UITabBarController,然后在以下内容中执行此操作init:
super.init(nibName: nil, bundle: nil)
object_setClass(self.tabBar, CustomTabBar.self)
(self.tabBar as? CustomTabBar)?.setup()
Run Code Online (Sandbox Code Playgroud)
不幸的是,你无法在调用之前设置类super.init(不管是在Swift中),所以当你更改类时,init方法已经运行,因此不会在自定义子类上调用.为了解决这个问题,我刚刚添加了一个setup()方法来完成我的所有自定义.
Swift中的另一个选择是扩展UITabBar并执行以下操作:
extension UITabBar {
open override func willMove(toSuperview newSuperview: UIView?) {
super.willMove(toSuperview: newSuperview)
/// Customise in here.
}
// Modify the height.
open override func sizeThatFits(_ size: CGSize) -> CGSize {
return CGSize(width: size.width, height: 64.0)
}
}
Run Code Online (Sandbox Code Playgroud)
但是这会影响所有实例UITabBar,所以我更喜欢第一个选项.
该解决方案来自ESTabBarControlller,用于替换没有 IB 的原生 UITabBar。
open override func viewDidLoad() {
super.viewDidLoad()
let tabBar = { () -> CustomTabBar in
let tabBar = CustomTabBar()
tabBar.delegate = self
return tabBar
}()
self.setValue(tabBar, forKey: "tabBar")
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5982 次 |
| 最近记录: |