有谁知道是否UIPopoverPresentationController
可以用来在iPhone上展示弹出窗口?想知道Apple是否在iOS 8上添加了此功能,试图为iPad和iPhone创建更统一的演示控制器.
不确定是否可以提出/回答Beta的问题.在那种情况下我会删除它.
我正在使用一个故事板segue,它将视图控制器呈现为popover.seque有一个自定义UIView
作为其锚点.在iOS9之前,popover会正确指向自定义的中心底部UIView
(在UIView下面显示).在iOS9上,它指向的左上角UIView
.
我确实试图跟踪所有选择器调用到自定义,UIView
以找出我可能需要在我的自定义中实现什么,UIView
以提供弹出窗口的"热点",但找不到任何东西
有任何想法吗..?谢谢
感谢@Igor Camilo他的回复 - 如果它对某些人有用,这就是我在我的代码中修复它的方法:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
UIPopoverPresentationController* possiblePopOver = segue.destinationViewController.popoverPresentationController;
if (possiblePopOver != nil) {
//
// iOS9 -- ensure correct sourceRect
//
possiblePopOver.sourceRect = possiblePopOver.sourceView.bounds;
}
...
}
Run Code Online (Sandbox Code Playgroud)
示例: "短"按钮触发弹出窗口,弹出窗口指向"排序"控件的左上角
我试图将一个弹出按钮放在一个按钮上.我似乎无法弄清楚我可能会出错的地方.它不是按钮位于按钮中间,而是偏离屏幕宽度的一半.
@IBAction func buttonClicked(sender: AnyObject){
var popoverViewController = self.storyboard?.instantiateViewControllerWithIdentifier("ServiceOptions") as! ServiceOptionsPopover
popoverViewController.delegate = self
popoverViewController.modalPresentationStyle = .Popover
popoverViewController.preferredContentSize = CGSizeMake(300, 300)
let popoverPresentationViewController = popoverViewController.popoverPresentationController
popoverPresentationViewController?.permittedArrowDirections = .Up
popoverPresentationViewController?.delegate = self
popoverPresentationViewController?.sourceView = sender as! UIButton
popoverPresentationViewController?.sourceRect = sender.frame
presentViewController(popoverViewController, animated: true, completion: nil)
}
Run Code Online (Sandbox Code Playgroud) 我在以模式方式使用视图控制器作为登录页面时遇到问题。我可以让控制器出现,但无法更改其全尺寸。
我试图在屏幕中央呈现带有褪色背景的弹出框。当我在视图之外单击时,弹出窗口应该关闭。
我浏览了整个网站的问题和答案,但没有找到对我有用的问题和答案。
这是我的代码:
import UIKit
class SignInView: UIViewController, UIPopoverPresentationControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "popoverSegue" {
var popover = segue.destination as! SignInPopView
popover.popoverPresentationController!.delegate = self
popover.modalPresentationStyle = UIModalPresentationStyle.popover
popover.preferredContentSize = CGSize(width: 375, height: 500)
}
}
Run Code Online (Sandbox Code Playgroud) 在iPad上,UIPopoverPresentationController可以正常工作,但在iPhone上,它始终显示全窗口模式弹出窗口。我正在使用以下代码:
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
MySecondViewController *contentVC = [storyboard instantiateViewControllerWithIdentifier:@"Pop"];
contentVC.modalPresentationStyle = UINavigationControllerOperationPop; // 13
UIPopoverPresentationController *popPC = contentVC.popoverPresentationController; // 14
contentVC.popoverPresentationController.sourceRect =CGRectMake(100, 130, 280, 230);
self.navigationController.preferredContentSize = CGSizeMake(200, self.parentViewController.childViewControllers.lastObject.preferredContentSize.height-100);
//self.showPop.frame; // 15
contentVC.popoverPresentationController.sourceView =
self.showPop; // 16
popPC.permittedArrowDirections = UIPopoverArrowDirectionAny; // 17
popPC.delegate = self; //18
[self presentViewController:contentVC animated:YES completion:nil];
-(UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller {
return UIModalPresentationNone;
}
Run Code Online (Sandbox Code Playgroud)