UITabBarItem 标签中的多行
Multiple lines in UITabBarItem Label
我已经尝试了很多东西,但无法找到一种方法来放置带有 lineNumber customised.0 的 UITabBarItem 的标签(我想在 2 行上获得标题)。
有办法吗?
您不能使用 UIBarButtonItem
执行此操作,因为它没有像 UINavigationItem
!
这样的 属性 titleView
您只能将字符串设置为标题和标签图像!就是这样!
如果您可以选择将标签设置为 tabbaritem 的标题视图,那么您可以使用 numberofline 0 的标签,但在这里您只能设置字符串!
现在它包含两个子视图。在 0 是 imageView,在 1 是标签。
现在让 imageview
的高度小一点,这样你就可以给标签的高度大一点来有多行。通过代码设置label的属性 ofnumberoflines
为0.
let viewTabBar = tabBarItem.value(forKey: "view") as? UIView
let imageView = viewTabBar?.subviews[0] as? UIImageView
let label = viewTabBar?.subviews[1] as? UILabel
现在开始使用这个标签。
更稳定的解决方案:
guard let view = tabBarItem?.value(forKey: "view") as? UIView,
let label = (view.subviews.flatMap{ [=10=] as? UILabel }).first,
let imageView = (view.subviews.flatMap{ [=10=] as? UIImageView }).first else { return }
这是我的解决方案
我们需要在 viewwillLayoutSubviews 中实现它。更新 ui 并使其工作
在此示例中,仅自定义我的第 3 个标签栏项目
override func viewWillLayoutSubviews() {
// acess to list of tab bar items
if let items = self.tabBar.items {
// in each item we have a view where we find 2 subviews imageview and label
// in this example i would like to change
// access to item view
let viewTabBar = items[2].value(forKey: "view") as? UIView
// access to item subviews : imageview and label
if viewTabBar.subviews.count == 2 {
let label = viewTabBar?.subviews[1]as? UILabel
// here is the customization for my label 2 lines
label?.numberOfLines = 2
label?.textAlignment = .center
label!.text = "tab_point".localized
// here customisation for image insets top and bottom
items[2].imageInsets = UIEdgeInsets(top: 8, left: 0, bottom: -5, right: 0)
}
}
}
这是结果
我已经尝试了很多东西,但无法找到一种方法来放置带有 lineNumber customised.0 的 UITabBarItem 的标签(我想在 2 行上获得标题)。
有办法吗?
您不能使用 UIBarButtonItem
执行此操作,因为它没有像 UINavigationItem
!
titleView
您只能将字符串设置为标题和标签图像!就是这样!
如果您可以选择将标签设置为 tabbaritem 的标题视图,那么您可以使用 numberofline 0 的标签,但在这里您只能设置字符串!
现在它包含两个子视图。在 0 是 imageView,在 1 是标签。
现在让 imageview
的高度小一点,这样你就可以给标签的高度大一点来有多行。通过代码设置label的属性 ofnumberoflines
为0.
let viewTabBar = tabBarItem.value(forKey: "view") as? UIView
let imageView = viewTabBar?.subviews[0] as? UIImageView
let label = viewTabBar?.subviews[1] as? UILabel
现在开始使用这个标签。
更稳定的解决方案:
guard let view = tabBarItem?.value(forKey: "view") as? UIView,
let label = (view.subviews.flatMap{ [=10=] as? UILabel }).first,
let imageView = (view.subviews.flatMap{ [=10=] as? UIImageView }).first else { return }
这是我的解决方案
我们需要在 viewwillLayoutSubviews 中实现它。更新 ui 并使其工作
在此示例中,仅自定义我的第 3 个标签栏项目
override func viewWillLayoutSubviews() {
// acess to list of tab bar items
if let items = self.tabBar.items {
// in each item we have a view where we find 2 subviews imageview and label
// in this example i would like to change
// access to item view
let viewTabBar = items[2].value(forKey: "view") as? UIView
// access to item subviews : imageview and label
if viewTabBar.subviews.count == 2 {
let label = viewTabBar?.subviews[1]as? UILabel
// here is the customization for my label 2 lines
label?.numberOfLines = 2
label?.textAlignment = .center
label!.text = "tab_point".localized
// here customisation for image insets top and bottom
items[2].imageInsets = UIEdgeInsets(top: 8, left: 0, bottom: -5, right: 0)
}
}
}
这是结果