當通過UIPercentDrivenInteractiveTransition
實現模態視圖控制器的交互式解除(拖動模式應該解除它)時,我們遇到了這個問題。當交互式解除模式時出現故障
設置:
- 設置
UIViewController
嵌入UINavigationController
與至少一個按鈕,在UINavigationBar
- 模態呈現另一
UIViewController
嵌入UINavigationController
與至少一個按鈕,在UINavigationBar
- 上modaly設置
UIPanGestureRecognizer
呈現UINavigationController
驅動UIPercentDrivenInteractiveTransition
- 拖動模態WN通過點上
UINavigationBar
問題「拿着」它:
一邊慢慢向下拖動,動畫毛刺引起模式以跳上跳下
毛刺只出現在:
- 均
UINavigationBar
s至少有一個按鈕 - 你 「持有」 由點上
UINavigationBar
- 均
小例子可以從github repo下載模態。
有沒有人遇到過這樣的問題?有沒有解決方法?我們的設置有缺陷嗎?
更新
問題進行了模擬與iOS 9.3
,OSX 10.11.4
,在Xcode 7.3.1
編譯於iPhone 5的模擬器上面跑項目。
更新2
進一步調查顯示,這個問題可能不是在動畫:出於某種原因,在給定的設置pan.translationInView(view)
將返回這將導致動畫跳意外的值。
部分工作
基於普京的想法,我們通過重寫的UINavigationBar
hitTest
方法部分地解決了該問題:
class DraggableNavigationBar: UINavigationBar {
override func hitTest(point: CGPoint, withEvent event: UIEvent?) -> UIView? {
guard let view = super.hitTest(point, withEvent: event) else { return nil }
if view is UIControl || pointIsInsideNavigationButton(point) {
return view
} else {
return nil
}
}
private func pointIsInsideNavigationButton(point: CGPoint) -> Bool {
return subviews
.filter { $0.frame.contains(point) }
.filter { String($0.dynamicType) == "UINavigationItemButtonView" }
.isEmpty == false
}
}
適合我。無法在我的iPhone 6或iOS模擬器iPhone 6上看到任何故障。 –
上述代碼中沒有問題,像魅力 – iMHitesh
可以與我分享確切的問題。其中OS類型和xCode版本以及部署目標等。 – iMHitesh