ara*_*ker 14 xcode uitabbar ios swift swiftui
有没有办法增加标签栏项目图标的大小?
.frame(width: 40, height: 40)
没有帮助。
Settings()
.tabItem {
VStack {
Image(systemName: "archivebox")
}
}
.tag(1)
Run Code Online (Sandbox Code Playgroud)
ali*_*i6p 19
您可以直接使用这样的字体大小(在 Xcode 11.3 中测试)。
请注意,仅适用于符号图像(SF 符号或 . 自定义 SVG 符号),它不适用于位图图像。
YourView()
.tabItem {
Image(systemName: "heart").font(.system(size: 26))
Text("Offers")
}
Run Code Online (Sandbox Code Playgroud)
您可以使用.font()
修饰符获得更大的图像:
YourView()
.tabItem {
Image(systemName: "…").font(.title)
}
Run Code Online (Sandbox Code Playgroud)
可悲的是,将图像推到标签栏顶部的填充看起来有问题。
您可以创建自定义 tabView 来实现自定义高度
附加的屏幕截图显示了受此要点启发的自定义选项卡视图的结果
struct TabView: View {
var views: [TabBarItem]
@State var selectedIndex: Int = 0
init(_ views: [TabBarItem]) {
self.views = views
}
var body: some View {
ZStack {
ForEach(views.indices) { i in
self.views[i].view
.opacity(self.selectedIndex == i ? 1 : 0)
}
GeometryReader { geometry in
VStack {
Spacer()
ZStack(alignment: .top) {
LinearGradient(gradient: Gradient(colors: [Color.black.opacity(0.3), Color.black.opacity(0.4)]), startPoint: .top, endPoint: .bottom)
.frame(height: 70 + geometry.safeAreaInsets.bottom)
HStack {
ForEach(self.views.indices) { i in
Button(action: {
self.selectedIndex = i
}) {
VStack {
if self.selectedIndex == i {
self.views[i].image
.foregroundColor(.white)
.padding(.top,10)
.font(.title)
} else {
self.views[i].image
.foregroundColor(Color.white.opacity(0.4))
.padding(.top,10)
.font(.title)
}
Text(self.views[i].title)
.foregroundColor(.white)
.font(Font.system(size: 16, weight: .bold))
.padding(.top,10)
.opacity(0.5)
}
.frame(maxWidth: .infinity)
}
}
}
}
}
.edgesIgnoringSafeArea(.bottom)
.animation(.easeInOut)
}
}
}
}
struct TabBarItem {
var view: AnyView
var image: Image
var title: String
init<V: View>(view: V, image: Image, title: String) {
self.view = AnyView(view)
self.image = image
self.title = title
}
}
/// Main View
struct ContentView: View {
var body: some View {
TabView([
TabBarItem(view: Text("This is home screen"),
image: Image(systemName:"house.fill"),
title: "home"),
TabBarItem(view: Text("2"),
image: Image(systemName:"heart.fill"),
title: "favorite"),
])
}
}
Run Code Online (Sandbox Code Playgroud)