Vic*_*ler 12
您可以执行以下两个选项之一:
创建了一个动作UIButton
在你UIViewController
和现在里面ViewController
你要像酥料饼和您UIViewController
必须实现的协议UIPopoverPresentationControllerDelegate
,采取下面的代码看看:
@IBAction func showPopover(sender: AnyObject) {
var popoverContent = self.storyboard?.instantiateViewControllerWithIdentifier("StoryboardIdentifier") as! UIViewController
popoverContent.modalPresentationStyle = .Popover
var popover = popoverContent.popoverPresentationController
if let popover = popoverContent.popoverPresentationController {
let viewForSource = sender as! UIView
popover.sourceView = viewForSource
// the position of the popover where it's showed
popover.sourceRect = viewForSource.bounds
// the size you want to display
popoverContent.preferredContentSize = CGSizeMake(200,500)
popover.delegate = self
}
self.presentViewController(popoverContent, animated: true, completion: nil)
}
func adaptivePresentationStyleForPresentationController(controller: UIPresentationController) -> UIModalPresentationStyle {
return .None
}
Run Code Online (Sandbox Code Playgroud)
根据@matt 编程iOS 8的书:
iOS 8中的popover表示控制器是一个表示控制器(
UIPresentationController
),并且表示控制器是自适应的.这意味着,默认情况下,在水平紧凑的环境中(即在iPhone上),.Popover
模态演示样式将被视为.FullScreen
.在iPad上显示为popover的内容将在iPhone上显示为全屏显示视图,完全取代界面.
要避免在iPhone中出现这种情况,您需要adaptivePresentationStyleForPresentationController
在您的内部实现委托方法 UIViewController
以正确显示Popover.
在我看来,另一种方式更容易做,并且正在使用Interface Builder,只需从中UIButton
创建一个segue到ViewController
你想要的并在segue中选择Popover
segue.
我希望这对你有帮助.
Swift 4这是完全可用的代码.所以在这里你会看到大小为250x250的弹出窗口:
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var button: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
// in case if you don't want to make it via IBAction
button.addTarget(self, action: #selector(tapped), for: .touchUpInside)
}
@objc
private func tapped() {
guard let popVC = storyboard?.instantiateViewController(withIdentifier: "popVC") else { return }
popVC.modalPresentationStyle = .popover
let popOverVC = popVC.popoverPresentationController
popOverVC?.delegate = self
popOverVC?.sourceView = self.button
popOverVC?.sourceRect = CGRect(x: self.button.bounds.midX, y: self.button.bounds.minY, width: 0, height: 0)
popVC.preferredContentSize = CGSize(width: 250, height: 250)
self.present(popVC, animated: true)
}
}
// This is we need to make it looks as a popup window on iPhone
extension ViewController: UIPopoverPresentationControllerDelegate {
func adaptivePresentationStyle(for controller: UIPresentationController) -> UIModalPresentationStyle {
return .none
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,您必须向要作为弹出窗口呈现的一个viewController提供popVC标识符.
希望有所帮助!
归档时间: |
|
查看次数: |
19130 次 |
最近记录: |