我正在使用标签页视图更改应用程序中的屏幕。我还使用了一个自定义的标签栏,我创建了导航。
我的问题是标签视图看起来像是在自己下面创建了一个随机的空白空间。我不知道这是不是自定义选项卡视图。
重要提示:需要注意的一点是,如果你点击空白区域的任何地方,它实际上会浏览视图-所以它看起来像是一个不可见的标签栏?
以下是问题的截图:
ContentView:
struct ContentView: View {
@State var selectedTab = 0
var body: some View {
VStack {
TabView(selection: $selectedTab) {
MyGarageView().tag(0)
FuelView().tag(1)
FinderView().tag(2)
}
}
ZStack{
HStack{
ForEach((TabbedItems.allCases), id: \.self){ item in
Button{
selectedTab = item.rawValue
} label: {
CustomTabItem(imageName: item.iconName, title: item.title, isActive: (selectedTab == item.rawValue))
}
}
}
.padding(6)
}
.frame(height: 75)
.cornerRadius(15)
.padding(.horizontal, 26)
}
}
CustomTabBarView:
enum TabbedItems: Int, CaseIterable{
case myGarage = 0
case fuel
case map
var title: String{
switch self {
case .myGarage:
return "Garage"
case .fuel:
return "Fuel"
case .map:
return "Finder"
}
}
var iconName: String {
switch self {
case .myGarage:
return "garage"
case .fuel:
return "fuel"
case .map:
return "map"
}
}
}
extension ContentView {
func CustomTabItem(imageName: String, title: String, isActive: Bool) -> some View {
HStack(spacing: 10){
Spacer()
Image(imageName)
.resizable()
.renderingMode(.template)
.foregroundColor(isActive ? .white : .gray)
.frame(width: 20, height: 20)
if isActive{
Text(title)
.font(.system(size: 14))
.foregroundColor(isActive ? .white : .black)
}
Spacer()
}
.frame(width: isActive ? 150 : 60, height: 60)
.background(isActive ? .black : .clear)
.cornerRadius(15)
}
}
我试过隐藏选项卡视图,但没有用。
我也试过摆弄框架,但没有效果。
我看不出这个问题,其他帖子/文章也没有帮助。我被卡住了:(
1条答案
按热度按时间af7jpaap1#
使用
TabView
的正常方式是 * 要么 * 有一个标签栏,其中填充了TabItem
,* 或 * 使用页面视图样式。TabItem
附加到TabView
中的每个视图。你没有使用这两种方法。所以没有真实的需要使用
TabView
。但是,如果您真的想使用
TabView
,那么解决空白空间的一种方法(当使用.automatic
选项卡样式时)是将自定义选项卡栏显示为覆盖。如果选项卡栏的高度大于您试图隐藏的空白空间,则可能需要在TabView
下方添加更多填充,以便为自定义选项卡栏留出更多空间。就像这样:
虽然这样做是可行的,但您需要依赖
TabView
下方的空白区域,因为如果没有空白区域,您的自定义标签栏将与页面内容重叠。因此,您可能需要重新考虑是否真的需要使用TabView
。另一种方法是用
ZStack
替换TabView
,然后根据状态变量selectedTab
的设置在不同视图之间切换。自定义选项卡栏将以完全相同的方式工作。通过完全避免TabView
,您将不会受到TabView
布局在未来iOS版本中更改的影响。