簡體   English   中英

當iPhone / iPad上的設備方向發生變化時,如何處理Swift中的彈出式窗口

[英]How to handle popover in Swift when the device orientation is changing on iPhone/iPad

我正在Swift中使用popoverPresentationController創建一個popoverPresentationController 第一次顯示正常,但是當我旋轉設備時,它會更改其源位置。
無論方向如何,如何使其固定在其原始源點?

我做的代碼。

@IBAction func btn_popover_click(sender: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)
}

迅捷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)
}

我認為您應該考慮使用AutoLayout ,這是一種在不同尺寸的屏幕和旋轉屏幕上處理對象(如LabelButton等)的位置和尺寸的有效方法。 可以在情節提要中設置自動布局,也可以將其設置為代碼的一部分。

順便說一下, AutoLayout太多了,很難說。 我建議您看一下有關AutoLayout的教程

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM