我正在使用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)
}
答案 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
,这是在不同大小的屏幕和旋转屏幕上处理对象(如Label
,Button
等)位置和大小的有效方法。 AutoLayout可以在故事板中设置,也可以作为代码的一部分设置。
顺便说一下,AutoLayout
太多了,很难说。我建议你看看Tutorial about the AutoLayout。