Swift 如何使用导航控制器隐藏选项卡栏项目上的标题
我在导航控制器上有一个与选项卡栏控制器连接的选项卡栏项目,我想删除swift中的标题 选项卡栏控制器>导航控制器>视图控制器Swift 如何使用导航控制器隐藏选项卡栏项目上的标题,swift,uinavigationcontroller,uitabbarcontroller,uitabbaritem,Swift,Uinavigationcontroller,Uitabbarcontroller,Uitabbaritem,我在导航控制器上有一个与选项卡栏控制器连接的选项卡栏项目,我想删除swift中的标题 选项卡栏控制器>导航控制器>视图控制器 应用程序从带有五个选项卡的选项卡栏控制器开始,每个选项卡都可以正常工作,我的意思是将标题隐藏在选项卡栏项下,但图像中的选项卡仅存在未隐藏的问题,因此应用程序也可以使用此选项卡,如果用户注销,并且图像中的Viewcontroller正常正在显示,但如果用户正在登录,则选项卡栏上的标题项将显示,因此如果没有,我可以在Xcode上以编程方式隐藏标题,请转到情节提要,然后单击
应用程序从带有五个选项卡的选项卡栏控制器开始,每个选项卡都可以正常工作,我的意思是将标题隐藏在选项卡栏项下,但图像中的选项卡仅存在未隐藏的问题,因此应用程序也可以使用此选项卡,如果用户注销,并且图像中的Viewcontroller正常正在显示,但如果用户正在登录,则选项卡栏上的标题项将显示,因此如果没有,我可以在
Xcode
上以编程方式隐藏标题,请转到情节提要,然后单击设置图标的导航控制器。单击导航控制器底部的选项卡项
。在左侧,转到属性检查器并删除barItem标题
您也可以通过编程的方式来实现这一点,即使您的故事板将保持不同
let items = self.tabBarController?.tabBar.items
let tabItem = items![2]
tabItem.title = ""
可以使用
uitabaritem
上的标题配置选项卡,该标题由选项卡中根视图控制器的标题覆盖。因此,我想象您正在BookingViewController中设置title=“Booking”
据我所知,没有API可以显式隐藏选项卡标题,但基本上可以通过将它们移出屏幕来隐藏它们:
let tabBarTitleOffset = UIOffsetMake(0,50)
for controller in tabBarController.viewControllers? {
controller.tabBarItem.titlePositionAdjustment = tabBarTitleOffset
}
然后,图标可能会显示得有点高,您也可以通过设置tabBarItem.imageInsets
进行调整以进行补偿。您可以尝试此操作
将此添加到不需要标题的视图控制器中
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.tabBarController?.title = ""
}
我将创建一个子类
uitabaritem
,该子类限制设置title
,如下所示:
final class MyTabBarItem: UITabBarItem {
override var title: String? {
get { return nil }
set { super.title = title }
}
override var imageInsets: UIEdgeInsets {
get { return UIEdgeInsets(top: 5, left: 0, bottom: -5, right: 0) }
set { super.imageInsets = imageInsets }
}
convenience init(image: UIImage? , selectedImage: UIImage?) {
self.init()
self.image = image
self.selectedImage = image
}
override init() {
super.init()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
然后使用自定义类初始化视图控制器的tabBarItem
:
tabBarItem = MyTabBarItem(image: UIImage(named: "my_img"), selectedImage: nil)
我最近遇到了这个问题,我想我应该为子孙后代发布我自己的解决方案,因为我认为它很轻,有些人可能更喜欢它 首先,不管您如何创建选项卡项(我的是一个
uitabarcontroller
子类,我将我的子控制器传递到该子类中)-将选项卡项标题设置为空字符串
(当然,此解决方案也适用于OP场景,其中您有一个带有嵌入式导航控制器的TabbarController
,这是相对常见的)
您可能知道,设置UIViewController的标题将导致相关选项卡项拾取标题
要在不设置选项卡项标题的情况下拥有UIViewController标题,请将新UILabel添加到视图控制器的导航项标题视图
我在UIViewController
上创建了一个扩展,如下所示:
extension UIViewController {
func addNavItemTitle(resourceString: String, textColor: UIColor = UIColor.white) {
// Add title view ~ allows overriding title w/out showing it on tabBarItem
let titleLabel = UILabel()
titleLabel.text = NSLocalizedString(resourceString)
titleLabel.textColor = textColor
titleLabel.font = UIFont.viewTitle
titleLabel.sizeToFit()
self.navigationItem.titleView = titleLabel
}
}
自定义您喜欢的字体和颜色。让标签自行调整大小,这样您就不必在此处测量或设置其框架
我也更喜欢使用本地化字符串,而不是直接设置字符串
现在,在任何选项卡子控制器中,为了在不拾取选项卡项标题的情况下设置视图控制器标题,我只需调用addNavItemTitle(resourceString:“example.title”)
在viewDidLoad
您可能还注意到,我对NSLocalizedString
的调用缺少一个参数。这是因为我倾向于对注释使用与资源字符串相同的字符串。因此,我创建了一个全局函数来简化调用,而无需重复字符串
像这样:
public func NSLocalizedString(_ key: String) -> String {
return NSLocalizedString(key, comment: key)
}
正如其他人所建议的,您可以转到Interface Builder并删除条形图项目上的标题,也可以通过编程来完成
只要不为选项卡链接到的UIViewController设置title属性,这就足够了。如果要为视图控制器设置标题并避免其显示为条形项目标题,请使用
navigationItem.title=“My title”
而不是title=“My title”
谢谢,伙计,但我已经这么做了,如何从UITabBarController隐藏标题是行不通的?好吧,xcode技巧应该可以很好地工作。它只是设置项目下方显示的文本。如果要隐藏并再次显示,则必须使用编程代码。我假定您已询问我在何处添加代码。好的,在任何链接到选项卡栏的视图中,但是你应该添加到第一个显示的视图中。我刚刚更新了主题,希望现在更清楚谢谢你,伙计,我知道了,感谢你关于覆盖的想法,我刚刚发现我的viewcontroller在导航控制器中有一个标题,它影响了我在选项卡栏项目上的标题。有史以来最好的解决方案!!