Kur*_*son 11 uiviewcontroller ios iphone-6-plus
在我的iOS 8应用程序中,除了iPhone 6 Plus横向外,所有方向的所有设备上都能正确显示此popover segue:

这就是它在iPhone 6 Plus环境中的外观(它几乎从上到下延伸):

当它显示如下时,单击视图外部并不会忽略它(虽然取消确实有效).旋转回肖像使其恢复正常.
其中的所有约束UIViewController都安装在所有大小的类上.
在调试值时,viewDidAppear:我看到以下内容:
是什么导致视图的高度跳到394?
我实际上也遇到了与iPhone 6 Plus环境中另一个popover segue相同的问题.(如果有好奇心,我在这里使用的是VC而不是'UIAlertController',因为UITextField显示的验证要求不能正常使用UIAlertController.)
编辑以包含我的弹出代码:
此代码可在以下位置找到 prepareForSegue:
FavoriteNameViewController *nameVC = segue.destinationViewController;
UIPopoverPresentationController *popPC = nameVC.popoverPresentationController;
popPC.delegate = self;
nameVC.delegate = self;
nameVC.view.center = self.originalContentView.center;
Run Code Online (Sandbox Code Playgroud)
然后是委托方法:
- (UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller {
return UIModalPresentationNone;
}
Run Code Online (Sandbox Code Playgroud)
这是Xcode中的segue定义:

mat*_*att 18
你所看到的不是一个弹出窗口.这是一个正常的呈现视图.默认情况下,弹出窗口在iPad上显示为弹出框,但作为iPhone上的呈现视图 - 包括iPhone 6 plus.在其他iPhone上,这个呈现的视图是全屏的 - 它涵盖了一切.但iPhone 6是如此之宽,以至于它们不能这样做,因此它以标准宽度(较小的iPhone的宽度)出现在屏幕中间.
因此,优选的内容大小没有效果.这不是一个弹出窗口.呈现的视图控制器视图具有标准大小,并且这个视图也不例外.
但是,您可以将弹出窗口显示为 iPhone上的弹出窗口.为此:
popoverPresentationController 在呈现之前为弹出视图控制器设置委托.
在委托中,实现adaptivePresentationStyleForPresentationController:并返回.None.
但是,这显然不适用于横向模式的iPhone 6 Plus; popover不是"适应".我会把它描述为一个错误!
编辑在iOS 9中,问题解决了!实现新的委托方法adaptivePresentationStyleForPresentationController:traitCollection:返回.None,你将在所有情况下得到一个弹出窗口,包括横向的iPhone 6 Plus.这是一个完整的工作示例,其中创建弹出框并在代码中召唤以响应按钮点击:
@IBAction func doButton(sender: AnyObject) {
let vc = MyViewController()
vc.preferredContentSize = CGSizeMake(400,500)
vc.modalPresentationStyle = .Popover
if let pres = vc.presentationController {
pres.delegate = self
}
self.presentViewController(vc, animated: true, completion: nil)
if let pop = vc.popoverPresentationController {
pop.sourceView = (sender as! UIView)
pop.sourceRect = (sender as! UIView).bounds
}
}
func adaptivePresentationStyleForPresentationController(
controller: UIPresentationController,
traitCollection: UITraitCollection)
-> UIModalPresentationStyle {
return .None
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3053 次 |
| 最近记录: |