【问题标题】:Add a badge value in SwiftUI in a simple way for a TabView tabItem在 SwiftUI 中以简单的方式为 TabView tabItem 添加徽章值
【发布时间】:2020-07-16 06:14:46
【问题描述】:

是否可以在 SwiftUI 中为 TabView tabItem 以简单的方式添加徽章值?

像这样(这里是普通的 Swift):

import UIKit

class TabBarController: UITabBarController {

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    self.tabBar.items![2].badgeValue = "7"
}

}

谢谢

【问题讨论】:

    标签: xcode swiftui tabview tabitem


    【解决方案1】:

    SwiftUI 中的 TabViewItem 上没有徽章计数属性,因此您必须在 TabViewItem 顶部手动添加 ZStack 并进行一些计算。

    struct ContentView: View {
      @State private var badgeNumber: Int = 10
      private var badgePosition: CGFloat = 1
      private var tabsCount: CGFloat = 1
    
      var body: some View {
        GeometryReader { geometry in
          ZStack(alignment: .bottomLeading) {
            // TabView
            TabView {
              Text("First View")
                .tabItem {
                  Image(systemName: "tray.fill")
                  Text("First")
              }
            }
    
            // Badge View
            ZStack {
              Circle()
                .foregroundColor(.red)
    
              Text("\(self.badgeNumber)")
                .foregroundColor(.white)
                .font(Font.system(size: 12))
            }
            .frame(width: 20, height: 20)
            .offset(x: ( ( 2 * self.badgePosition) - 1 ) * ( geometry.size.width / ( 2 * self.tabsCount ) ), y: -30)
            .opacity(self.badgeNumber == 0 ? 0 : 1)
          }
        }
      }
    }
    

    【讨论】:

    • 这行得通,但我遇到了一个问题,即打开键盘时徽章被向上推(对于文本字段)。 TabView 保持固定在底部并且不会移动,但徽章会移动。有什么想法吗?
    • 能否请您提供您的代码,我尝试通过添加 TextField 但效果很好。
    • 为避免随键盘移动(iOS14 引入)将 .ignoresSafeArea(.keyboard) 添加到封闭的 ZStack。
    • 有效,但不能再点击选项卡视图项代替徽章
    • @PeterKreinz 我知道已经很晚了,你可以在徽章 zStackView 上添加 onTap 手势
    猜你喜欢
    • 2020-02-09
    • 1970-01-01
    • 2020-12-02
    • 2022-06-11
    • 2021-06-23
    • 2021-04-23
    • 2020-04-20
    • 1970-01-01
    • 2022-07-12
    相关资源
    最近更新 更多