关于标准UISegmentedControl异常弹出同款选项弹窗的原因问询
这种单设备专属的诡异问题确实挺闹心的,我结合自己遇到过的类似情况,给你整理几个排查方向:
先排查设备系统层面的设置
虽然你已经关闭了3D Touch,但iOS 10.2的辅助功能里还有些可能影响触控的选项,比如「便捷访问」(下拉屏幕半屏的功能)、「开关控制」或者「辅助触控(小白点)」的手势设置。建议先尝试重启设备,如果没用,可以试试「设置-通用-还原-还原所有设置」(注意这不会删除数据,但会重置系统设置,记得提前备份重要配置)。另外也可以测试下系统自带应用里的UISegmentedControl(比如设置里的各种分段选项),看看会不会出现同样的弹窗——如果系统应用也有问题,大概率是设备本身的系统或硬件异常。检查应用代码中的自定义逻辑
有没有给UISegmentedControl加过Category、或者用Runtime Swizzle替换过它的触摸事件处理方法?比如不小心把touchesBegan:或者sendAction:to:forEvent:这类方法重写了,导致触发了额外的弹窗逻辑。另外也看看有没有给这个分段控件添加了多余的UITapGestureRecognizer,或者有没有误把它当成了UIPopoverPresentationController的触发源(比如代码里不小心给它绑定了popover的present逻辑)。核对界面文件(XIB/Storyboard)的配置
打开对应的界面文件,检查这个UISegmentedControl的属性:有没有开启奇怪的交互选项?比如「User Interaction Enabled」是否正常,有没有关联错误的IBAction?另外看看有没有在界面编辑器里给它设置了popover相关的Segue(比如不小心拖了个Popover Segue到它身上)。清理应用缓存与重装
有时候应用的沙盒缓存数据损坏也会导致这种异常。可以先删除应用重新安装,或者用Xcode的「Window > Devices and Simulators」找到这台设备,选中你的应用,点击「Delete Container」清除沙盒数据后再重新运行。排查iOS 10.2的系统特定Bug
iOS 10.2是比较旧的版本,可能存在一些已修复的系统级控件Bug。你可以找另一台同样运行iOS 10.2的iPhone 7 Plus测试你的应用,如果其他同系统同型号设备正常,那说明问题确实是这台设备的个体异常;如果也出现问题,那可能需要针对iOS 10.2做特殊适配,比如避免某些API的使用,或者用自定义分段控件替代系统的UISegmentedControl。排查硬件触控异常
虽然同型号另一台正常,但不排除这台设备的触控硬件有轻微故障(比如触摸感应偏移、误判手势)。可以让用户测试其他第三方应用里的分段控件,如果多个应用都出现类似弹窗,那大概率是设备硬件问题,建议联系苹果售后检测。
内容的提问来源于stack exchange,提问作者Artem Rizhov

