添加 UIBarButtonItem 覆盖 UINavigationController 后退按钮
Added UIBarButtonItem covers UINavigationController back button
当我的应用在 RTL 设备配置上运行时,我将 UIBarButtonItem
添加到 self.navigationItem.leftBarButtonItem
,而在 LTR 设备配置上运行时,我将 self.navigationItem.rightBarButtonItem
添加到 self.navigationItem.leftBarButtonItem
。
在这两种配置中添加 UIBarButtonItem
覆盖默认按钮后退按钮。
这是我的代码:
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
我使用 Swift 3、Xcode 8.1 和 iPad Air 2,其 OS 版本为 9.3.2
有人知道怎么解决吗?
非常感谢您的帮助,谢谢。
下面设置这个属性
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)
您似乎通过显式设置右侧栏按钮项目覆盖了库存后退按钮。幸运的是,有一种内置方法可以让您拥有多个左栏按钮项,而且它比您想象的还要简单。与其设置 navigationItem.leftBarButtonItem
,不如设置 navigationItem.leftBarButtonItems
!这是一个例子:
let backButton = self.navigationItem.leftBarButtonItem
let newButton = UIBarButtonItem(customView: label)
self.navigationItem.leftBarButtonItems = [backButton, newButton]
当我的应用在 RTL 设备配置上运行时,我将 UIBarButtonItem
添加到 self.navigationItem.leftBarButtonItem
,而在 LTR 设备配置上运行时,我将 self.navigationItem.rightBarButtonItem
添加到 self.navigationItem.leftBarButtonItem
。
在这两种配置中添加 UIBarButtonItem
覆盖默认按钮后退按钮。
这是我的代码:
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
我使用 Swift 3、Xcode 8.1 和 iPad Air 2,其 OS 版本为 9.3.2 有人知道怎么解决吗?
非常感谢您的帮助,谢谢。
下面设置这个属性
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)
您似乎通过显式设置右侧栏按钮项目覆盖了库存后退按钮。幸运的是,有一种内置方法可以让您拥有多个左栏按钮项,而且它比您想象的还要简单。与其设置 navigationItem.leftBarButtonItem
,不如设置 navigationItem.leftBarButtonItems
!这是一个例子:
let backButton = self.navigationItem.leftBarButtonItem
let newButton = UIBarButtonItem(customView: label)
self.navigationItem.leftBarButtonItems = [backButton, newButton]