Swift按钮点击唤起Popover却全屏显示,求排查问题
解决Popover点击后铺满整个页面的问题
嘿,我来帮你搞定这个Popover全屏的问题~
你遇到的这个情况,核心原因是iPhone设备的iOS默认行为:苹果在iPhone上会自动把popover样式的模态视图转为全屏展示,哪怕你已经设置了modalPresentationStyle = .popover也没用——这个设置在iPad上是正常生效的,但iPhone默认会忽略它,直接全屏。
具体解决方案
你只需要实现UIPopoverPresentationControllerDelegate的一个代理方法,强制iOS不使用自适应的全屏样式,保持Popover的悬浮气泡形态:
- 先确保你的视图控制器遵循了代理协议:
class YourViewController: UIViewController, UIPopoverPresentationControllerDelegate { // 你的现有代码(包括buttonTap方法) }
- 添加这个关键的代理方法:
func adaptivePresentationStyle(for controller: UIPresentationController) -> UIModalPresentationStyle { // 返回.none,强制保持Popover的原始样式,不转为全屏 return .none }
额外优化建议
为了让Popover的尺寸更符合你的需求,还可以在Popover对应的ViewController里设置默认大小:
class PopoverViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // 根据你的需求调整宽高 preferredContentSize = CGSize(width: 220, height: 180) } }
你现有代码里设置sourceView和sourceRect的部分是正确的,不用改动。做完上面的修改后,不管是在iPhone还是iPad上,点击按钮都会弹出正常的悬浮Popover,不会再铺满整个页面啦~
内容的提问来源于stack exchange,提问作者Mark Sunny
相关产品推荐
相关产品推荐

