当iPhone / iPad上的设备方向发生变化时,如何在Swift中处理popover

时间:2015-04-19 10:29:08

标签: ios swift popover

我正在使用Swift中的popoverPresentationController创建一个popover。它首次显示正常,但是当我旋转设备时,它会改变其源位置 无论方向如何,如何使其保持在原始源点?

我做的代码。

@IBAction func btn_popover_click(发件人:UIButton){

    let menuViewController = PopoverViewController()
    menuViewController.modalPresentationStyle = UIModalPresentationStyle.Popover
    menuViewController.preferredContentSize = CGSizeMake(50, 100) // Size of popover.

    popoverMenuViewController = menuViewController.popoverPresentationController
    popoverMenuViewController?.permittedArrowDirections = .Any
    popoverMenuViewController?.delegate = self
    popoverMenuViewController?.sourceView = sender.superview
    popoverMenuViewController?.sourceRect = sender.frame
    presentViewController(
        menuViewController,
        animated: true,
        completion: nil)
}

2 个答案:

答案 0 :(得分:2)

Swift 3

确保呈现弹出窗口的视图控制器符合UIPopoverPresentationControllerDelegate。

示例:

class MyViewContoller: UIVIewContoller, UIPUIPopoverPresentationControllerDelegate 
{

// your code...

// MARK: UIPopoverPresentationControllerDelegate Methods

func popoverPresentationController(_ popoverPresentationController: UIPopoverPresentationController, willRepositionPopoverTo rect: UnsafeMutablePointer<CGRect>, in view: AutoreleasingUnsafeMutablePointer<UIView>) {
    let viewFrame = popoverPresentationController.presentingViewController.view.frame
    let deltaX = viewFrame.height - rect.pointee.midX
    rect.pointee = CGRect(x: viewFrame.width - deltaX, y: rect.pointee.maxY, width: 0, height: 0)
}

答案 1 :(得分:-1)

我认为您应该考虑AutoLayout,这是在不同大小的屏幕和旋转屏幕上处理对象(如LabelButton等)位置和大小的有效方法。 AutoLayout可以在故事板中设置,也可以作为代码的一部分设置。

顺便说一下,AutoLayout太多了,很难说。我建议你看看Tutorial about the AutoLayout