gpt4 book ai didi

ios - 更改 InteractivePopGestureRecognizer 方向

转载 作者:行者123 更新时间:2023-11-29 11:39:14 31 4
gpt4 key购买 nike

我的应用程序支持英语和阿拉伯语。 interactivePopGestureRecognizer 在使用英语时可以正常工作,即从左向右滑动时,它会弹出 viewController。但是当我使用阿拉伯语时,我已将 semanticContentAttribute 从右更改为左。

if([[[NSUserDefaults standardUserDefaults] objectForKey:@"LanguageCode"] isEqualToString:@"en"])
{
[[UIView appearance] setSemanticContentAttribute:UISemanticContentAttributeForceLeftToRight]; //View for English language
}
else
{
[[UIView appearance] setSemanticContentAttribute:UISemanticContentAttributeForceRightToLeft]; //mirror view for Arabic language
}

但是interactivePopGestureRecogniser仍然是从左到右。如何更改 interactivePopGestureRecogniser 的方向以使其支持阿拉伯语?我想使用阿拉伯语从右向左滑动到弹出 View Controller 。

最佳答案

如果有人寻求的话,我经过长时间的搜索找到了解决方案。

之前的答案可能会导致 UI 挂起/卡住。

UI 卡住/挂起的原因是,当在 Root View 上执行手势时,UINavigationController 缺少对 Root View Controller 的检查。有几种方法可以解决这个问题,以下是我所做的。

您应该子类化 UINavigationController,这是正确的方法并添加实现,如下所示:

class RTLNavController: UINavigationController, UINavigationControllerDelegate, UIGestureRecognizerDelegate {

override func viewDidLoad() {
super.viewDidLoad()

// Adding swipe to pop viewController
self.interactivePopGestureRecognizer?.isEnabled = true
self.interactivePopGestureRecognizer?.delegate = self

// UINavigationControllerDelegate
self.delegate = self
}

func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
navigationController.view.semanticContentAttribute = UIView.isRightToLeft() ? .forceRightToLeft : .forceLeftToRight
navigationController.navigationBar.semanticContentAttribute = UIView.isRightToLeft() ? .forceRightToLeft : .forceLeftToRight
}

// Checking if the viewController is last, if not disable the gesture
func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
if self.viewControllers.count > 1 {
return true
}

return false
}
}

extension UIView {
static func isRightToLeft() -> Bool {
return UIView.appearance().semanticContentAttribute == .forceRightToLeft
}
}

资源:

原始问题:

答案用于解决方案:

其他可能效果更好的解决方案(但它是在 Objective-C 中):

关于ios - 更改 InteractivePopGestureRecognizer 方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47525211/

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