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

如何获取iPad分屏/侧滑模式下App相对屏幕的位置?

iPad Split View/Slide Over 状态判断方案

你之前用UIApplication.shared.windows.first拿到的是WebView的窗口,不是App的主窗口,所以位置信息不对。下面是正确的实现方式:

Swift 原生模块实现

直接从当前活跃场景里拿到主窗口,再获取它的位置和尺寸:

import UIKit
import React

@objc(AppPositionModule)
class AppPositionModule: NSObject, RCTBridgeModule {
  static func moduleName() -> String! {
    return "AppPositionModule"
  }
  
  @objc
  func getAppPosition(_ callback: RCTResponseSenderBlock) {
    // 获取当前活跃的场景
    guard let scene = UIApplication.shared.connectedScenes.first as? UIWindowScene,
          // 筛选出主窗口(keyWindow)
          let mainWindow = scene.windows.first(where: { $0.isKeyWindow }) else {
      callback([NSNull(), "无法获取主窗口信息"])
      return
    }
    
    let screenWidth = UIScreen.main.bounds.width
    let windowFrame = mainWindow.frame
    let windowX = windowFrame.origin.x
    let windowWidth = windowFrame.width
    
    var positionStatus = "unknown"
    // 判断位置状态
    if windowX == 0 {
      positionStatus = "left" // 左侧分屏
    } else if windowX == screenWidth - windowWidth {
      positionStatus = "right" // 右侧分屏
    } else if windowWidth < screenWidth * 0.5 {
      positionStatus = "slide_over" // Slide Over模式
    }
    
    // 返回结果给RN
    callback([["status": positionStatus, "x": windowX, "width": windowWidth]])
  }
  
  @objc
  static func requiresMainQueueSetup() -> Bool {
    return true
  }
}

核心要点

  • iOS 13+ 用connectedScenes获取场景,替代旧的UIApplication.shared.windows,避免拿到非主窗口
  • 通过isKeyWindow筛选主窗口,确保拿到的是App本身的窗口,不是WebView或其他子窗口
  • 基于窗口的origin.x和宽度判断状态:
    • x=0 → 左侧分屏
    • x等于屏幕宽度减窗口宽度 → 右侧分屏
    • 窗口宽度小于屏幕一半 → Slide Over(符合iPad的Slide Over宽度规则)

React Native 端调用示例

import { NativeModules } from 'react-native';

const { AppPositionModule } = NativeModules;

// 调用获取状态
AppPositionModule.getAppPosition((result, error) => {
  if (error) {
    console.error('获取位置失败:', error);
    return;
  }
  console.log('当前App状态:', result.status);
  console.log('窗口X坐标:', result.x);
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 12:00:59