Добавьте значение значка в SwiftUI простым способом для TabView tabItem

Можно ли простым способом добавить значение значка в SwiftUI для TabView tabItem?

Вот так (здесь обычный Swift):

import UIKit

class TabBarController: UITabBarController {

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

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

}

Спасибо


person Flincorp    schedule 04.04.2020    source источник


Ответы (1)


В SwiftUI нет свойства подсчета значков для TabViewItem, поэтому вам нужно вручную добавить ZStack поверх TabViewItem и выполнить некоторые вычисления.

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)
      }
    }
  }
}
person Muhammad Waqas Bhati    schedule 04.04.2020
comment
Это работает, но у меня проблема, когда значок выдвигается при открытии клавиатуры (для TextField). TabView остается прикрепленным ко дну и не перемещается, но значок перемещается. Есть предположения? - person lmh; 12.09.2020
comment
не могли бы вы предоставить мне свой код, я попытался добавить TextField, но он работает нормально. - person Muhammad Waqas Bhati; 12.09.2020
comment
Чтобы избежать перемещения с помощью клавиатуры (представленной в iOS14), добавьте .ignoresSafeArea (.keyboard) к охватывающему ZStack. - person Curmudgeonlybumbly; 17.09.2020
comment
работает, но элемент представления вкладки больше не может быть нажат вместо значка - person Peter Kreinz; 19.05.2021
comment
@PeterKreinz Я знаю, что уже поздно, вы можете добавить жест onTap к значку zStackView - person Muhammad Waqas Bhati; 23.06.2021