Ios 增加preferredContentSize后,UIPopoverPresentationController设置增长动画时出现白色矩形瑕疵
我正在使用Ios 增加preferredContentSize后,UIPopoverPresentationController设置增长动画时出现白色矩形瑕疵,ios,swift,xcode,autolayout,uikit,Ios,Swift,Xcode,Autolayout,Uikit,我正在使用UIPopoverPresentationViewController在popover中以模式呈现UIViewController。根据,更新UIViewController上的preferredContentSize属性(在弹出窗口中显示)将设置大小更改的动画 当大小更改生效时,preferredContentSize的某些值将在动画期间导致此奇怪的白色矩形伪影。除了这个奇怪的白色矩形外,动画效果非常好 这是我用来展示我的popover的代码。在本例中,preferredConte
UIPopoverPresentationViewController
在popover中以模式呈现UIViewController
。根据,更新UIViewController
上的preferredContentSize
属性(在弹出窗口中显示)将设置大小更改的动画
当大小更改生效时,preferredContentSize
的某些值将在动画期间导致此奇怪的白色矩形伪影。除了这个奇怪的白色矩形外,动画效果非常好
这是我用来展示我的popover的代码。在本例中,preferredContentSize
设置为CGSize(宽度:200,高度:100)
会导致工件出现。如果我使用CGSize(宽度:200,高度:200)
所有东西都可以完美地工作,没有伪影
@objc private func presentPopover() {
let vc = UIViewController()
vc.modalPresentationStyle = .popover
vc.preferredContentSize = CGSize(width: 200, height: 50)
guard let popVC = vc.presentationController as? UIPopoverPresentationController else {
fatalError("View Controller must have a Popover Presentation Controller")
}
popVC.sourceView = self.view
popVC.sourceRect = self.label.frame
popVC.delegate = self
popVC.permittedArrowDirections = .up
self.present(vc, animated: true)
// very short delay to allow popover growth to animate
// without delay, layout happens so quickly that no animation is visible
Timer.scheduledTimer(withTimeInterval: 0.15, repeats: false) { (timer) in
vc.preferredContentSize = CGSize(width: 200, height: self.popoverHeight)
}
}
func adaptivePresentationStyle(for controller: UIPresentationController) -> UIModalPresentationStyle {
return .none
}
func adaptivePresentationStyle(for controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle {
return .none
}
在出现的工件和preferredContentSize
之间似乎存在某种关系,但我无法解释这种关系是什么
我已尝试将
计时器
安排在未来0.1秒(例如1秒、5秒)之后,认为可能存在一些布局争用情况,但这并没有解决问题。如果没有计时器
,则POPOR将自动显示在最终的首选内容大小
,而无需设置动画。我认为这是因为布局发生得太快了。使用另一个延迟构造,例如DispatchQueue.main.asyncAfter(截止日期:execute:)
也会导致出现白色矩形工件。嘿,您是如何解决此问题的?嘿,您是如何解决此问题的?