我有带有UIViewController的UINavigationBarDelegate委托,我以编程的方式设置所有东西,我的应用程序是多语言的,所以我需要RTL (从右到左)在每个部分的支持,比如NavigationBar。我采用了这样的方法:
if MSGlobal.setting.language.direction == .L2R
{
navigationItem.setRightBarButtonItems(rightItems, animated: true)
}
else
{
navigationItem.setLeftBarButtonItems(rightItems, animated: true)
}
let stackCount = navigationController!.viewControllers.count
if stackCount == 1
{
let leftBtnItem:UIBarButtonItem = UIBarButtonItem(image: UIImage(named:"drawer"), landscapeImagePhone: UIImage(named:"drawer"), style: UIBarButtonItemStyle.Plain, target: self, action: "cb_drawerTapped:")
if MSGlobal.setting.language.direction == .L2R
{
navigationItem.setLeftBarButtonItem(leftBtnItem, animated: true)
}
else
{
navigationItem.setRightBarButtonItem(leftBtnItem, animated: true)
}
}
else
{
navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: UIBarButtonItemStyle.Plain, target: self, action: "cb_back:")
}所有的工作在LTR语言,如英语,但在RTL语言后退按钮没有显示。我的结果肯定是这样的:
LTR: [ < Title [btn1...btnn]]
RTL: [[btnn...btn1] Title > ]发布于 2019-06-20 09:33:21
如果您的目标是拥有正确的UIBarButtonItem和back操作,您可以通过Storyboard将Semantic更改为Force-Right-to-Left。或按以下代码:
Swift 5
在ViewController viewDidLoad()里面
self.navigationController?.navigationBar.semanticContentAttribute = .forceRightToLeft如果要更改导航条,导航控制器流向右向左方向,则可以使用以下命令:
override func viewDidLoad() {
super.viewDidLoad()
self.navigationController?.navigationBar.semanticContentAttribute = .forceRightToLeft
}但是您应该指出,它不会改变Swipe Direction,--它只会对navigationBar产生影响,如果您想要更改Swipe Direction,则可以使用:
self.navigationController?.view.semanticContentAttribute = .forceRightToLeft如果您想在一行中完成所有这些操作并更改整个应用程序RTL,请使用:
UIView.appearance().semanticContentAttribute = .forceRightToLefthttps://stackoverflow.com/questions/33995903
复制相似问题