0

当我的应用程序运行在RTL设备配置上时,我添加了UIBarButtonItemself.navigationItem.leftBarButtonItem,当LTR设备配置时我添加了self.navigationItem.rightBarButtonItem。 在这两个配置中添加了UIBarButtonItem涵盖后面的按钮,这是defualt按钮。添加UIBarButtonItem覆盖UINavigationController后退按钮

这里是我的代码:

let label = UILabel(frame: CGRect(x: 0, y: 0, width: CGFloat(150), height: CGFloat(20))) 
    label.backgroundColor = UIColor.clear 
    label.font = UIFont.systemFont(ofSize: 18.0) 
    label.shadowColor = UIColor(white: 0.0, alpha:0.5) 
    label.textAlignment = NSTextAlignment.center 
    label.textColor = UIColor(hexaValue: ConsColors.albums) 
    label.text = "Just text" 
    label.sizeToFit() 
    if UIApplication.shared.userInterfaceLayoutDirection == UIUserInterfaceLayoutDirection.rightToLeft{ 
     self.navigationItem.leftBarButtonItem = UIBarButtonItem(customView: label) 
    }else{ 
     self.navigationItem.rightBarButtonItem = UIBarButtonItem(customView: label) 
    } 

我甚至有一个正常的系统UIBarButtonItem尝试。 还试图设置UINavigationcontroller语义内容属性强制RightToLeft或LefttoRight不起作用。

UINavigationBar.appearance().semanticContentAttribute = .forceRightToleft 

我用斯威夫特3时,Xcode 8.1和一个iPad 2的空气与它的操作系统优化版本是9.3.2 有谁知道如何解决它?

将感谢帮助,谢谢。

回答

1

设置为低于

self.navigationItem.leftItemsSupplementBackButton = true 

这此属性将确保自定义按钮返回按钮后添加

更新:

按我的理解,你的要求是有默认后退按钮和对面的自定义按钮。下面的条件不需要是

if UIApplication.shared.userInterfaceLayoutDirection == UIUserInterfaceLayoutDirection.rightToLeft{ 
     self.navigationItem.leftBarButtonItem = UIBarButtonItem(customView: label) 
    }else{ 
     self.navigationItem.rightBarButtonItem = UIBarButtonItem(customView: label) 
    } 

替换与

self.navigationItem.rightBarButtonItem = UIBarButtonItem(customView: label) 
+0

谢谢,我试过了,它现在不覆盖后退按钮,但我想实现的是返回按钮的一侧和另一侧的按钮/视图,而不是两个按钮在同一侧。这发生在我身上。 –

+0

当我的设备配置LTR时,它的工作原理是,后退按钮位于左侧,第二个按钮位于右侧。虽然设备配置了RTL后退按钮和第二个按钮在右侧彼此相邻。奇怪的行为。并且正如我搜索的那样,没有self.navigationItem.rightItemsSupplementBackButton :( –

+0

谢谢你,你是对的没有必要的if语句。它现在工作。 –

0

看起来显式设置合适的栏按钮项目,要覆盖股票后退按钮。幸运的是,有一种内置的方式可以让您有多个左栏按钮项目,它比您想象的更简单。而不是设置navigationItem.leftBarButtonItem,而只需设置navigationItem.leftBarButtonItems!这里是一个例子:

let backButton = self.navigationItem.leftBarButtonItem 
let newButton = UIBarButtonItem(customView: label) 
self.navigationItem.leftBarButtonItems = [backButton, newButton] 
+0

谢谢,我已经试过了,它不断覆盖后退按钮,不过即使它不是我想要实现的功能,一边是返回按钮,另一边是另一个按钮/视图,而不是同一边的两个按钮。 –