gpt4 book ai didi

ios 9 UIPopoverPresentationController 旋转时的恒定放置

转载 作者:行者123 更新时间:2023-11-28 12:40:54 24 4
gpt4 key购买 nike

在 iOS9 中,当我使用 UIPopoverPresentationController 旋转我的屏幕时,坐标被重置为 0,并且没有附加到我的 sourceView 这是一个按钮。

我试过:

func popoverPresentationController(popoverPresentationController: UIPopoverPresentationController, willRepositionPopoverToRect rect: UnsafeMutablePointer, inView view: AutoreleasingUnsafeMutablePointer) { rect.initialize(CGRectMake(200, 200, 400, 400))

但无济于事。有什么帮助吗?

最佳答案

您可以对 sourceView 按钮应用约束,然后将其用作弹出源:

myPopoverViewController.popoverPresentationController?.sourceView = button

也可以在storyboard中设置sourceView,但是sourceRect需要在代码中设置:

myPopoverViewController.popoverPresentationController?.sourceRect = button.bounds

您需要正确的源矩形以使弹出框箭头正确对齐。现在您无需关闭和轮流显示弹出窗口。 UIPopoverPresentationController 会为你做这些。一旦在创建弹出窗口时设置了 sourceView/sourceRect,您甚至不需要更新它们。

使用 viewWillTransition 捕捉大小和方向的变化:

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
super.viewWillTransition(to: size, with: coordinator)
coordinator.animate(alongsideTransition: { _ in
if self.popover != nil {
// optionally scroll to popover source rect, if inside scroll view
let rect = ...
self.scrollView.scrollRectToVisible(rect, animated: false)

// update source rect constraints
buttonConstraint.constant = ...
button.setNeedsLayout()
button.layoutIfNeeded()
}
}, completion: nil)
}

解释:animate(alongsideTransition: ((UIViewControllerTransitionCoordinatorContext) -> Void)?, completion: ((UIViewControllerTransitionCoordinatorContext) -> Void)? = nil) 的技巧是你应该在 alongsideTransition 中更新你的约束 关闭,不在 completion 中。通过这种方式,您可以确保 UIPopoverPresentationController 在旋转结束时恢复弹出窗口时具有更新的 sourceRect。

似乎违反直觉的是,在 alongsideTransition 闭包内,您已经有了新的布局,您可以从中导出约束计算。

关于ios 9 UIPopoverPresentationController 旋转时的恒定放置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39415364/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com