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

iPadOS18下UITabBarController设.tabBar模式仍拦截触摸事件求助

iPadOS 18下Toga OptionContainer(基于UITabBarController)触摸事件无响应问题

我用Toga 0.5.x(搭配Briefcase 0.3.16)开发Python iOS应用,其中toga.OptionContainer底层基于UITabBarController实现。应用在iPhone上运行正常,但在iPad Pro(M5,iOS 18模拟器)中,登录后主界面完全无响应——触摸事件无法传递至Python处理函数。

正常工作的功能

  • 登录功能(点击登录按钮可正常触发)
  • Toga详情列表可正常渲染并显示
  • 顶部Tab Bar可见

无法正常工作的功能

  • 点击详情列表的任意行:通过UITableViewDelegate实现的tableView:didSelectRowAtIndexPath:从未触发
  • 点击UIBarButtonItem无响应
  • 点击Tab Bar项无响应

已做的诊断

我在创建UITabBarController后、添加到任何窗口前,通过rubicon-objc调用Objective-C选择器,将UITabBarController.mode设置为.tabBar(对应值为1):

self.home_option._impl.native_controller.setMode_(1)
print(self.home_option._impl.native_controller.mode)  # 输出:1

日志确认模式已设置为1。UITabBarController仅在窗口可见且用户登录后才添加到窗口视图层级中,但iPad上的触摸事件仍无法传递至Python,而相同代码在iPhone上可正常传递触摸事件。

推测

即使在.tabBar模式下,iPadOS 18仍会在使用UITabBarController时添加某个不可见的覆盖层或触摸拦截视图,导致命中测试无法到达表格视图或导航栏按钮项。

最小复现代码

import toga
from toga.style import Pack
from toga.style.pack import COLUMN

class MyApp(toga.App):
    def startup(self):
        content_box = toga.Box(style=Pack(direction=COLUMN, flex=1))
        label = toga.Label('Tap me')
        btn = toga.Button('Press', on_press=lambda w: print('pressed!'))
        content_box.add(label, btn)

        tab = toga.OptionContainer(
            content=[('Tab 1', content_box)],
            style=Pack(flex=1),
        )
        # 在iPad iOS 18上设置mode = .tabBar
        tab._impl.native_controller.setMode_(1)

        main_box = toga.Box(style=Pack(direction=COLUMN, flex=1))
        main_box.add(tab)

        self.main_window = toga.MainWindow()
        self.main_window.content = main_box
        self.main_window.show()

在iPad iOS 18模拟器中,点击按钮不会输出'pressed!',但在iPhone上可正常输出。

核心问题

  1. iPadOS 18对UITabBarController做了什么,导致即使在.tabBar模式下也会拦截触摸事件?
  2. 是否存在UITabBarController代理方法、子类重写或配置,可恢复iPad iOS 18上的正常命中测试?
  3. 有没有方法检查哪个视图在拦截触摸事件(例如通过Xcode视图调试器查看是否存在不可见覆盖层)?

环境

  • Xcode 16
  • iOS 18.x模拟器
  • TARGETED_DEVICE_FAMILY = "1,2"(通用应用)
  • Python 3.12
  • rubicon-objc 0.4.9
  • toga-iOS 0.5.1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 23:25:37