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

如何实现iPad横屏移除NavigationSplitView侧边栏切换按钮(竖屏保留)

解决iPad横竖屏NavigationSplitView侧边栏切换按钮显示问题

你的代码核心问题是首次启动时未获取当前实际屏幕方向,isPortrait初始值固定为true,导致横屏启动时按钮无法正确隐藏。以下是修正后的实现,完美匹配iOS17“家庭”应用的逻辑:

struct SidebarMainView: View {
    @State private var isPortrait = false

    var body: some View {
        NavigationSplitView {
            List {
                Text("1")
                Text("2")
                Text("3")
            }
            .listStyle(SidebarListStyle())
            .toolbar(removing: isPortrait ? .none : .sidebarToggle)
            .navigationTitle("HP")
            // 首次加载时获取当前方向
            .onAppear {
                updatePortraitStatus()
            }
            // 监听方向变化更新状态
            .onReceive(NotificationCenter.default.publisher(for: UIDevice.orientationDidChangeNotification)) { _ in
                updatePortraitStatus()
            }
        } detail: {
            Text("Select a department: \(isPortrait ? "yes" : "no")")
        }
    }

    // 统一更新屏幕方向状态的方法
    private func updatePortraitStatus() {
        // 改用connectedScenes获取当前场景,适配多场景模式
        guard let scene = UIApplication.shared.connectedScenes.first as? UIWindowScene else { return }
        isPortrait = scene.interfaceOrientation.isPortrait
    }
}

关键修改点:

  • 初始化方向修正:添加.onAppear回调,首次启动时主动获取当前屏幕方向,避免初始值错误
  • 场景获取优化:用connectedScenes替代windows.first,适配iOS13+的多窗口场景模式
  • 代码复用:将方向判断逻辑抽为私有方法,减少重复代码,提升可维护性

这样修改后,无论首次启动是横屏还是竖屏,侧边栏切换按钮都会正确显示/隐藏,方向切换时也能实时响应。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 10:32:16