![](/img/trans.png)
[英]How to handle UI components when device orientation for iPhone/iPad changes?
[英]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
,這是一種在不同尺寸的屏幕和旋轉屏幕上處理對象(如Label
, Button
等)的位置和尺寸的有效方法。 可以在情節提要中設置自動布局,也可以將其設置為代碼的一部分。
順便說一下, AutoLayout
太多了,很難說。 我建議您看一下有關AutoLayout的教程 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.