You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI 如何移除PageViewStyle样式TabView页面间的间距

解决方案

你当前看到的页面间隙主要来自两个部分:一是你给每个Tab子页面设置了比TabView窄100pt的宽度,导致每个子页面自带左右各50pt的空白,滑动时两个页面的空白叠加形成大间距;二是PageTabViewStyle自带的默认页面间距,可按以下方案修改:

方案1:兼容iOS 17及以上(最简单)

直接在PageTabViewStyle初始化时传入spacing: 0,同时调整子页面的结构,让子页面撑满TabView宽度,红色视图在内部居中即可:

struct ContentView: View {
    var body: some View {
        GeometryReader { reader in
            VStack(alignment: .center) {
                TabView {
                    ForEach(0..<7) { index in
                        // 子页面整体撑满TabView宽度
                        VStack {
                            // 内部红色视图保持你需要的宽度
                            VStack {
                                // 此处放你的页面内容
                            }
                            .frame(maxHeight: .infinity)
                            .frame(width: reader.size.width - 100)
                            .background(Color.red)
                            .cornerRadius(15)
                        }
                        .frame(maxWidth: .infinity, maxHeight: .infinity)
                    }
                }
                .background(Color.yellow)
                // 传入spacing: 0移除默认页面间距
                .tabViewStyle(PageTabViewStyle(indexDisplayMode: .always, spacing: 0))
                .frame(width: reader.size.width, height: 500)
            }
            .frame(maxWidth: .infinity, maxHeight: .infinity)
        }
    }
}

方案2:兼容iOS 14~iOS 16

如果需要支持更低版本,调整页面结构后,可通过负padding抵消默认间距,也可搭配UIKit外观设置实现:

struct ContentView: View {
    var body: some View {
        GeometryReader { reader in
            VStack(alignment: .center) {
                TabView {
                    ForEach(0..<7) { index in
                        VStack {
                            VStack {
                                // 此处放你的页面内容
                            }
                            .frame(maxHeight: .infinity)
                            .frame(width: reader.size.width - 100)
                            .background(Color.red)
                            .cornerRadius(15)
                        }
                        .frame(maxWidth: .infinity, maxHeight: .infinity)
                        // 抵消默认的8pt页面间距,可根据实际效果调整数值
                        .padding(.horizontal, -4)
                    }
                }
                .background(Color.yellow)
                .tabViewStyle(PageTabViewStyle(indexDisplayMode: .always))
                .frame(width: reader.size.width, height: 500)
            }
            .frame(maxWidth: .infinity, maxHeight: .infinity)
            .onAppear {
                // 全局配置PageControl样式,可选
                UIPageControl.appearance().pageIndicatorTintColor = .systemGray4
                UIPageControl.appearance().currentPageIndicatorTintColor = .systemRed
            }
        }
    }
}

内容的提问来源于stack exchange,提问作者mahan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 03:42:03