Pin*_*ngo 11 swift swiftui xcode12
有没有办法在 swiftUI 中更改 tabView 指示器颜色?
这是我的代码
struct OnBoarding: View {
var body: some View {
TabView {
ForEach(0 ..< 3) { item in
VStack {
Image("discover")
.resizable()
.scaledToFit()
}
}
}
.tabViewStyle(PageIndexViewStyle(backgroundDisplayMode: Color ?))
}
}
struct OnBoarding_Previews: PreviewProvider {
static var previews: some View {
OnBoarding()
}
}
Run Code Online (Sandbox Code Playgroud)
我试过 tabViewStyle(PageIndexViewStyle(backgroundDisplayMode: Color ?)) 但无法解决它
Ach*_*raf 21
你需要使用 UIkit
init() {
UIPageControl.appearance().currentPageIndicatorTintColor = .red
UIPageControl.appearance().pageIndicatorTintColor = UIColor.black.withAlphaComponent(0.2)
}
Run Code Online (Sandbox Code Playgroud)
基本上,您需要在视图出现时设置全局变量。一种方法如下:
import SwiftUI
struct OnboardingView: View {
var pages: [Page]
var body: some View {
TabView {
ForEach(pages) { page in
// Your component view
}
}
.tabViewStyle(PageTabViewStyle())
.onAppear {
setupAppearance()
}
}
func setupAppearance() {
UIPageControl.appearance().currentPageIndicatorTintColor = .black
UIPageControl.appearance().pageIndicatorTintColor = UIColor.black.withAlphaComponent(0.2)
}
}
Run Code Online (Sandbox Code Playgroud)
首先创建一个子视图,例如:
struct SliderTabView: View {
init() {
UIPageControl.appearance().currentPageIndicatorTintColor = .red
UIPageControl.appearance().pageIndicatorTintColor = UIColor.red.withAlphaComponent(0.2)
}
var body: some View {
TabView{
ForEach(players){ player in
//Slider content here ...
}
}.tabViewStyle(PageTabViewStyle(indexDisplayMode: .always))
}
Run Code Online (Sandbox Code Playgroud)
从主视图调用子视图,如下所示:
struct ContentView: View {
var body: some View {
SliderTabView()
}
}
Run Code Online (Sandbox Code Playgroud)
如果您使用 UIKit 中的 SwiftUI,则有一种更微妙的方法来更新 UIPageControl 外观。
// SwiftUI with with UIPageControl
struct MyView: View { ... }
Run Code Online (Sandbox Code Playgroud)
import SwiftUI
import UIKit
final class MyViewContainerController: UIHostingController<MyView> {
init() {
let view = MyView()
super.init(rootView: view)
}
@available(*, unavailable)
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func viewDidLoad() {
super.viewDidLoad()
let containerTypes = [MyViewContainerController.self]
let appearance = UIPageControl.appearance(whenContainedInInstancesOf: containerTypes)
appearance.currentPageIndicatorTintColor = .systemBlue
appearance.pageIndicatorTintColor = .systemIndigo
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2540 次 |
| 最近记录: |